- 一、文件与文件流
- 1. 文件
- 2. 文件流
- 二、文件操作
- 1. 创建文件对象的相关构造器和方法
- (1)构造器
- 【1】根据路径构建一个File对象
- 【2】根据父目录文件+子路径构建
- 【3】根据父目录路径+子路径构建
- (2)方法
- 【1】创建新文件
- 2. 文件的相关方法(获取文件相关的信息)
- (1)getName() 获取文件名字
- (2)getAbsolutePath() 文件绝对路径
- (3)getParent() 文件父级目录
- (4)length() 文件大小(字节)
- (5)exists() 文件或目录是否存在
- (6)isFile() 是不是一个文件
- (7)isDirectory() 是不是一个目录
- (8)mkdir 创建一级目录
- (9)mkdirs 创建多级目录
- (10)delete 删除空的目录或文件
- 三、Java I/O流的原理与分类
- 1. Java IO流的原理
- 2. Java IO流的分类
- 四、InputStream 字节输入流
- 1. 介绍
- 2. 常用的子类
- 五、FilelnputStream 文件字节输入流
- 1. 介绍
- 2. 示例代码
- 六、FileOutputStream 文件字节输出流
- 1. 介绍
- 2. 示例代码
- 3. 文件拷贝
- 七、FileReader文件字符输入流 和 FileWriter文件字符输出流
- 1. FileReader介绍
- (2)FileReader相关方法:
- (3)用到的相关API:
- 2. FileReader代码示例
- 3. FileWriter介绍
- (1)FileWriter相关方法:
- (2)相关APl:
- 4. FileWriter代码示例
- 八、节点流和处理流
- 1. 介绍
- 2. 区别与练习
- 3. 处理流的功能:
文件:保存数据的地方。
比如经常使用的word文档,txt文件,excel文件…都是文件。它既可以保存一张图片,也可以保持视频声音.…
(1)文件在程序中是以流的形式来操作的
(2)流:数据在数据源(文件)和程序(内存)之间经历的路径
(3)输入流:数据从数据源(文件)到程序(内存)的路径(4)输出流:数据从程序(内存)到数据源(文件)的路径
(5)输入输出是相对程序而言的
new File(String pathname)【2】根据父目录文件+子路径构建
new File(File parent,String child)【3】根据父目录路径+子路径构建
new File(String parent,String child)(2)方法 【1】创建新文件
createNewFile2. 文件的相关方法(获取文件相关的信息) (1)getName() 获取文件名字 (2)getAbsolutePath() 文件绝对路径 (3)getParent() 文件父级目录 (4)length() 文件大小(字节) (5)exists() 文件或目录是否存在 (6)isFile() 是不是一个文件 (7)isDirectory() 是不是一个目录 (8)mkdir 创建一级目录 (9)mkdirs 创建多级目录 (10)delete 删除空的目录或文件 三、Java I/O流的原理与分类 1. Java IO流的原理
(1)I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等。
(2)Java程序中,对于数据的输入/输出操作以”流(stream)”的方式进行。
(3)java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据。
(1)按操作数据单位分为:字节流(8bit),字符流(按字符)。
【1】操作声音、视频、word,PDF文件,用字节流,可以保证无损,但是效率相比字符流低。
【2】操作文本文件,用字符流,效率高。
【3】字节输入流lnputStream,字节输出流OutputStream,字符输入流Reader,字符输出流Writer都是抽象父类
(2)按数据流的流向分为:输入流,输出流
(3)按流的角色分为:节点流,处理流(包装流)
(1)InputStream抽象类是所有类字节输入流的超类
2. 常用的子类(1)FilelnputStream:文件输入流
(2)BufferedlnputStream:缓冲字节输入流
(3)ObjectInputStream:对象字节输入流
(1)使用read() 方法,从该输入流读取一个字节的数据。 读取的数据返回的是int类型,直到最后读完了返回-1。故需要用while循环配合read() 进行读取。而在程序中显示时,需要类型装换为char
(2)文件读取完毕之后,需要关闭该流,释放该流,避免造成资源的浪费。
(3)因为InputStream是字节流,每次读取8个bite,即1个字节,字母是1个字节,汉字是3个字节,故用read() 方法读取汉字会出来乱码。
(4)为了提高效率,使用 read(byte[] b)
从该输入流读取最多 b.length个字节的数据为字节数组。
(1)使用read()方法
(2)使用read(byte[])方法
原理:将文件1拷贝到文件2处,中间通过java程序作为中转,而且是利用循环,读取一部分数据后就将这部分数据写入到指定文件中,即边读边写。
注意:写文件时,一定使用write(byte[] b, int off, int len) 方法,避免文件造成损坏/损失
【FileReader类图】
【FileWriter类图】
(1)FileReader 和 FileWriter是字符流,即按照字符来操作io
(2)FileReader相关方法:【1】new FileReader(File/String)
【2】read():每次读取单个字符,返回该字符,如果到文件未尾返回-1
【3】read(char[ ]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1
【1】new String(char[]): 将char[]转换成String
【2】new String(char[ ],off,len):将char[的指定部分转换成String
(1)FileReader与read( )
(2)FileReader与read(char [ ] )
【1】new FileWriter(File/String):盖模式,相当于流的指针在首端
【2】new FileWriter(File/String,true):追加模式,相当于流的指针在尾端
【3】write(int):写入单个字符
【4】write(char):写入指定数组
【5】write(char[ ] ,off,len):写入指定数组的指定部
【6】write (string):写入整个字符串
【7】write(string,off,len):写入字符串的指定部分
【1】String类:toCharArray:将String转换成char[ ]
【2】注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件!
(1)数据源:存放数据的地方,例如文件、数组、管道、字符串等
(2)节点流:可以从一个特定的地方读写数据,使用如FileReader、FileWriter
(3)处理流:是"连接"在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,使用如BufferedReader、BufferedWriter
(4)处理流也叫包装流,即对节点流进行包装,使功能更加强大
(5)在BufferedWriter中有一个Writer属性,该属性就可以接收继承了Writer类的子类,如FileWriter、FileOutputStream、StringWriter等等。所以不用考虑对于不同的数据源要选择什么类来操作,实现了包装的效果,增加了灵活性,故叫做包装流。
(1)节点流是底层流/低级流,直接跟数据源相接。
(2)处理流是包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
(3)处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连
(1)性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
(2)操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据, 使用更加灵活方便



