JAVA自学笔记20

1、递归:

1)方法定义中定义中调用方法本身的现象

2)要有出口,否则就是死递归

次数不能太多。否则内存将溢出

构造方法不能递归使用

//斐波那契数列:1,1,2,3,5,8,13,21.34
public int Fibonacci(int n){
if(n==1||n==2){return 1;}
return Fibonacci(n-1)+Fibonacci(n-2)
}

@例题1:遍历目录下指定后缀名结尾的文件名称

private static void getAllJavaFilePaths(File srcFolder){
//获取该目录下所有的文件或者文件夹的File数组
File[] fileArray=srcFolder.listFiles();
for(File file:fileArray){
if(file.isDirectory()){
getAllJavaFilePaths(file)
}else{
if(file.getNmae().endsWith(".java")){
System.out.println(file.getAbsolutePath());
}
}
}
}

@例题2:递归删除带内容的目录

public class DeleteFolders{
File[] fileArray=srcFolder.listFiles();
for(File file:fileArray){
if(file.isDirectory()){
deleteFolder(file);
}
else{
System.out.println(file.delete());
}
}
System.out.println(srcFolder.delete);
}

2、IO

1)用于处理设备之间的数据传输。java对数据的操作是通过流的方式,java用于操作的流的对象都在IO包中



2)IO流分类

按数据流向分:

输入流:读入数据

输出流:写出数据

按数据类型分

字节流

字符流

3)常用基类:

抽象基类:InputStream,OutputStream

字符流的抽象基类:

Reader,Writer

注意:由这四个类派生出来的子类名都是以其父类名作为子类名的后缀

4)FileOuputStream

构造方法:

FileOutputStream(File file)

FileOutputStream(String name)

//在一个文本文件中写一句hello
//采用字节输出流
//创建字节流输出对象
File file=new File("Fos.txt");
FileOutputStream fos=new FileOutputStream(file);
//或FileOutputStream fos=new FileOutputStream("fos.txt");
//写数据
fos.writer("hello".getBytes());
//释放资源
fos.close();//流关闭,通知系统释放相关资源

4)字节流写数据方式

public void write(int b)

写一个字节

public void write(byte[] b)

写一个字节数组

public void write(byte[] b,int off,int leng)

写一个字节数组的一部分

FileOutputStream fos=new FileOutputStream("fos2.txt");
fos.write(97);//写入a
byte[] bys={97,98,99,100,101};
fos.write(bys);
fos.write(bys,1,3);
//
//实现换行
FileOutputStream fos=new FileOutputStream("fos.txt");
for(int x=0,x<0,x++){
fos.write(("hello"+x).getBytes());
fos.write("\n".getBytes());
}
fos.close();
}

注意:

//追加写入
FileOutputStream fos=new FileOutputStream("fos.txt",true);
for(int x=0,x<0,x++){
fos.write(("hello"+x).getBytes());
fos.write("\r\n".getBytes());
}

5)异常处理

如果fos不是null,才能close

6)字节流读取数据

FileInputStream

构造方法:

FileInputStream(File file)

FileInputStream(String name)

成员方法:

int read():一次读取一个字节,返回-1则已读到末尾

int read(byte[] b):一次读取一个字节数组

FileInputStream fis=new FileInputStream(fis.txt);
int by=fis.read();
fis.close();
//改进,仅适用与字母与数字
int by=0;
while((by=fis.read())!=-1){
System.out.print((char)by);
fis.close();
}
//字节流复制文本文件
//封装数据源,数据源已读要存在
FileInputStream fis=new FileInputStream("a.txt");
//封装目的地
FileOuputStream fos=new FileOuputStream("b.txt") int by=0;
while((by=fis.read())!=-1{
fos.write(by);
}
fis.close();
fos.close();
//将c盘目录下的a.txt内容复制到b.txt中
FileInputStream fis=new FileInputStream("c:\\a.txt");
FileOuputStream fos=new FileOuputStream("d:\\b.txt");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
} fos.close();
fis.close();
//复制图片
FileInputStream fis=new FileInputStream("c:\\a.jpg");
FileOuputStream fos=new FileOuputStream("d:\\b.jpg");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
fos.close();
fis.close();
}
//复制视频
FileInputStream fis=new FileInputStream("c:\\a.mp4");
FileOuputStream fos=new FileOuputStream("d:\\b.mp4");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
fos.close();
fis.close();
}//速度太慢,一次一个字节复制

研究

int read(byte[] b):一次读取一个字节数组,返回的是实际读取的字符数目,字节数组可被覆盖。到大结尾返回-1

//读取一个文件
byte[]bys=new byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
System.out.println(new String(bys,0,len));
}
fis.close();

存储图解:

//复制文本文件
FileInputStream fis=new FileIntputStream("c:\\a.txt");
FileOuputStream fis=new FileOutputStream("b.txt");
byte[]bys=new byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
for.write(bys,0,len);
fos.close();
fis.close();
}
字节流复制视频
FileInputStream fis=new FileIntputStream("c:\\a.mp4");
FileOuputStream fis=new FileOutputStream("b.mp4"); byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
for.write(bys,0,len);
fos.close();
fis.close();

7)字节缓冲流

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区的效果,java本身在设计过程中也考虑到了这样的设计思想(装饰设计模式后面讲解),故提供了字节缓冲流

字节缓冲输出流

BufferedOutputStream

字节缓冲输入流

BufferedInputStream

构造方法可以指定缓冲区的大小,因为默认缓冲区大小就足够了。

BufferedIn(out)putStream(In(Out)putStream)

字节缓冲区流仅仅提供缓冲区为高效而设计,但真正的读写操作还得靠基本的流对象实现。

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"));
//写数据
bos.write("hello".getBytes());
bos.close();
BufferedInputStream bos=new BufferedInputStream(new FileInputStream("bos.txt"));
//读数据
byte[]bys=new byte[1024];
int len=0;
while((len=bis.read(bys)!=-1){
System.out.println(new String(bys,0,len));
}

JAVA自学笔记20的更多相关文章

  1. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  2. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  3. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  4. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  5. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  6. JAVA自学笔记19

    JAVA自学笔记19 1.集合总结 Collection(单列集合) List(有序可重复) ArrayList:底层数据结构是数组 ,查询快,增删慢.线程不安全,效率高 Vector:底层数据结构是 ...

  7. JAVA自学笔记17

    JAVA自学笔记17 1.Map接口 1)概述 将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值.可以存储键值对的元素 2)与Collection接口的不同: ①Map是双列的 ...

  8. JAVA自学笔记25

    JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...

  9. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

随机推荐

  1. javascript 相关小的知识点集合

    本文主要是列出一些javascript 相关的,不限于javascript的,容易记错或者遗忘的小知识,小技巧. 1.javascript中的false 在 JavaScript,常见的 false ...

  2. jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理

    jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学,希望将视频中学到的知识用博客记录下来,更希望对有同样对jquery源码有困惑 ...

  3. move_uploaded_file中文乱码

    move_uploaded_file($_FILES['file']['tmp_name'],iconv("UTF-8","gb2312",$filname)

  4. sublime3 破解

    —– BEGIN LICENSE —–TwitterInc200 User LicenseEA7E-8900071D77F72E 390CDD93 4DCBA022 FAF6079061AA12C0 ...

  5. python之requests urllib3 连接池

    0.目录 1.参考 2. pool_connections 默认值为10,一个站点主机host对应一个pool (4)分析 host A>>host B>>host A pag ...

  6. Windows下Mongodb启动问题

    把mongodb安装完,运行server出现问题

  7. JMeter中BeanShell断言使用一

    Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面 首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS ...

  8. waf python build 工具使用流程

    waf python build 工具使用流程 waf 的 build 理念 build 了之后,可以跟踪到 ${SRC} 和 ${TGT} 有关联的文件,只有 ${SRC} 被修改过,在下次buil ...

  9. iOS应用 数据存储方式 (一)

    沙盒是每个应用程序的空间,每个应用程序只能访问自己的文件夹,不可以跨越,访问别的程序的文件夹,这个文件夹就是该应用程序的沙盒. 沙盒中包括以下几个文件夹: 1.应用程序包:(Layer)包含了所有资源 ...

  10. 【Java并发核心九】并发集合框架

    1.List接口:ArrayList 和 Vector ArrayList不是线程安全的,Vector是线程安全的,Vector有一个子类,可实现后进先出(LIFO)的对象堆栈(LinkedList ...