Java——IO流
File
位于java.io包
含义:表示文件或者文件夹(java中二者没有区分),但不能表示文件内容
功能:对文件或文件夹进行创建,查看,删除等操作;不能读取文件内容
java是跨平台的,因此在不同的平台中,路径的分隔符是不一样的(windows中的分隔符为:\ ;Linux和Macx中则是:/);但在java程序照片那个书写路径时,都可以写成 /
常见方法
-
判断文件/文件夹是否存在:exists()
-
判断该路径名表示的文件是否为目录:isDirectory()
-
判断该路径名表示的文件是否为普通文件:isFile()
-
创建文件:createNewFile() 创建的为空文件
-
创建文件夹:mkdir() mkdirs()
-
删除文件/文件夹:delete()
-
遍历子文件或子文件夹:list() listFiles()
mkdir()与mkdirs()的区别
mkdir()只能创建单个目录,如果上级目录不存在,会报错
mkdirs()能够创建单个或者多个目录,如果上级目录不存在,会自动创建上级目录
File file = new File("D:/newfile");
file.mkdir();
File file1 = new File("D:/newfile/myfile.txt");
file1.creatNewFile();
以上即表示创建一个文件夹,以及在该文件下创建 一个新的文件,但此时所创建的文件内部是没有任何内容的,而File本身也是不能对文件内部进行访问
我们通过购房部File买下了房子myfile,但myfile本身是没有装修过的毛坯房,而购房部是不能对毛坯房进行装修,此时我们需要专业的装修队,即IO流
IO流
输入输出流 I:input O:output
注意:本地IO流:站在内存方向看:进入内存的为输入流,从内存读取的为输出流
分类
-
按方向分
- 输入流:读操作
- 输出流:写操作
-
按数据传输单位分
- 字节流:一个字节一个字节的读写:万能流
- 字符流:一个字符一个字符读写:读写文本文件
-
按功能分
- 节点流:用于直接操作目标设备
- 处理流:是对一个已存在的流进行连接和封装
节点流
即字节流和字符流
能直接对文件进行读写,而不需要借助于其他IO流
字符节点流
对文本文件(即能被记事本打开的文件)进行读写:.txt .java等
注意:word文档不是文本文件
FileReader 文件字符输出流
FileWriter 文件字符输入流
字节节点流
万能流
FileInputStream 文件字节输入流
FileOutputStream 文件字节输出流
如果文件不存在,输入流会自动创建文件,但不能创建没有的目录
read()方法
read() 读取文件内容,一次只读一个字节,返回的是内容的编码
read(byte[] b)把读到的字节缓存到byte数组中,返回的是读到的字节长度
append
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EOU9EorW-1660743983722)(E:/Typora/image/1660634888509.png)]
字节流每次在写入文件内容时,会将之前写入的文本内容清空,在写入新的内容,进行覆盖
为避免文件内容被清除,引用append参数
通过设置append参数为true,实现文件内容的追加
close()
IO流使用之后需要及时关闭
关闭遵循先开后关的原则
为避免文件内容被清除,引用append参数
通过设置append参数为true,实现文件内容的追加
close()
IO流使用之后需要及时关闭
关闭遵循先开后关的原则
一个字节一个字节的读取文件就想只有一个装修工人在装修房子一样,当文件内容过大,即房子面积很大的情况下,一个字节读取会很慢,此时该名装修工人需要召唤他的小伙伴们帮忙,即java中的缓存流
缓存流
自带一个缓冲区, byte[] 字节流 ,char[]字符流
byte[] b = new byte[1024*1024];