这里写目录标题
File
(具体类)
简单描述与构造方法
创建功能
createNewFile方法
这里输出括号里会报错,需要将异常抛出,可以使用alt+回车 选择 抛出异常 解决方案,这样就不会报错了
这个方法可以用来创建一个新空文件,并且返回rue或者false
创建功能具体解释
在创建时,要先在构造方法时初始化想要创建之后的结果(实际上可以看成创建了一个指向该路径的File对象),但是这仅仅是个参考,起决定性作用的还是调用的创建方法,例如需求4,虽然构造方法参数想创建一个文件,但是创建方法是想创建一个文件夹(也就是目录),所以最终会创建一个目录。
同时,创建时不能有重复的名字,哪怕一个是文件一个是目录,也不能重名。
File类判断和获取功能(常规方法)
(下图是这些代码的运行结果)
这两个方法返回值一个是String数组一个是File数组,所以需要定义一个数组来接收,并可以通过增强for循环来遍历
对于File数组,如果调用输出getName方法,那么效果跟上面字符数组一样,同时,这里还可以使用File的其他方法来实现功能,例如图中的if判断 是否为文件,如果是,则输出文件名称
File删除功能
删除时,想要删除某个内容,直接用创建时初始化该内容的file对象进行delete调用
例如 想要删除myfile下的itcast目录 那么需要利用f3进行delete的调用,因为f3在初始化时,是myfile\itcast
递归
定义一个方法 方法自己调用自己 进行递归操作
案例
递归需要递归出口,因为递归是从大数向小数进行运行,所以出口一般都在最小的数,例如0 1 2 这些,采用if条件判断设置递归出口
实际上 递归出口就是一个终端,就是递归到最终的终端
案例2
递归出口 输出绝对路径
File 【】 fileArray=srcFile.listFiles();用来获取srcFile对象指向路径的下一级的所有文件和目录
字节流
IO流概述和分类
字节流写数据
InputStream OutputStream都是抽象类
写数据 要用输出流 写字节输出流 要用OutputStream
使用OutPut子类 创建对象
这里构造方法的内容起决定性作用 因为这个子类创建对象做了三件事 第一件事就是调用系统功能创建了文件
用该对象调用write方法,输入数字,但是往文件里写入的是ascll码对应的字符
在这当中如果遇到异常,应该alt+回车 将异常抛出,图中写创建对象时 以及 调用write方法时,都需要将异常抛出
字节流写数据的三种方式
这里参数是字节数组,可以自己定义一个字节数组,传入之后,会在指定文件里写入数字对应的字符
也可以利用字符串的一个方法,先将字符串转为字节数组,之后拿着这个转化而来的字节数组,当作参数传入write
这里第二个参数,规定了从哪个字节数组元素的索引开始,第三个参数表示,传入几个元素。
字节流写数据的两个小问题
如何换行
如何追加
这里用了FileOutputStream的另一个构造方法,与之前不同的是,加了一个参数,第二个参数如果为true,那么写数据时就会追加写数据
字节流写数据加入异常处理
(不作为重点)
字节流读数据
一次读一个字节数据
具体代码
首先要创建字节输入流对象,与字节输出流对象差不多
read方法的返回值为int类型,将读取到的数据转换为int值(所以输出时要强制类型转换为字符型)
而输出流的write方法无返回值
如果重复执行读写代码,那么会自己进行下一个字节的读取
通过测试发现,如果读到空字符串,那么read方法会返回-1,所以可以利用这点进行代码优化
(注意最后要加上by=fis.read() 进行数据的更新,否则会陷入死循环)
再次优化
一次读一个字节数组
这里用到专用的读取方法(与之前一次一个字节数据相同,只是参数不同)
返回值仍然是int 返回的是读取到的字节长度,参数是一个字节数组,作用是读取数据到字节数组
定义的字节数组长度 决定了一次可以读取的最大字节长度。(一般是1024)
因为传入参数时,传入的是数组名,也就是把整个数组传进去了,所以数组的长度就决定了一次可以读取的最大字节长度
这里使用string方法,在输出框里输入 new String (bys,0,len),可以输出读取到的字节,否则,如果读取到的数据个数少于定义的个数 那么会将后面部分原封不动的输出,而不会被替代
字节缓冲流
(可以降低底层的调用次数,提高效率)
字节缓冲流输出流写数据
字节缓冲流输入流读取数据的两种方式