javase 文件IO相关
IO流
IO流的分类
- 按流的方向分:输入流,输出流
- 读取数据的方式
- 按照字节读取 字节流
- 按照字符读取 文本流
java中所有的文件读取相关的类都是在java.io包下,同时所有的IO流类都实现了Closeable接口,这意味着所有流在使用以后都需要关闭。
所有的输出流实现了Flushable。输出流在输出完成之后一定要flush将管道中剩余的数据写入文件。
字节流
java.io.InputStream
java.io.OutputStream
以上两个抽象类代表字节流。所有继承自这两个接口的都是字节流。
FileInputStream
文件字节输入流,使用read方法读取文件。每次读取一个字节并返回。读到文件末尾了,就返回-1。缺点是一次读取一个字节,硬盘交换频繁,效率低
或者提供一个字节数组参数,当read方法每次读取时将会把读到文件装入提供的字节数组中,当返回-1时,以读取完文件。
available方法 获取还没有读取的字节数。可以利用这个方法一次性读取文件内容,但是该方法不适合于大文件。
skip方法 提供一个参数,跳过指定数量的字节
FileOutputStream
new FileOutputStream(name, isAppend)
文件输出流,第一个参数提供需要打开的文件名,第二个参数标志是否需要以追加方式打开。
write 当提供一个参数时写入一个字节数组。文件不存在时,自动新建,如果文件存在,根据参数判断是追加写入还是覆盖重写。
write(arr, offf, len) 将数组的一部分写入
字符流
java.io.Reader
java.io.Writer
以上两个抽象类代表字符流,所有继承自这两个接口的流都是字符流。
FileReader
字符文件输入流,基本使用参数和比特文件输入流差不多。只不过数据以字符数组的形式装载。
FileWriter
同
字节转换流
InputStreamReader
OutputStreamWriter
该流将字节流转换称为字符流
包装流
当一个流的构造方法中需要一个流的时候,作为参数的流称为节点流,外部负责包装的称为包装流,被构造的流称为包装流
缓冲包装流
缓冲包装流自带一个缓冲,同时还可以在构造是指定缓冲大小,但是大多数时候,缓冲大小都足够了。
自带缓冲,也就是自带读取的那个装载数组。在使用read方法的时候,尽管你可以读取一个字节或者字符,但是对于包装流来说它还是从他的缓冲中取出的。缓冲流的默认缓冲大小为1024*8个字节/字符。
-
BufferedReader
-
BufferedWriter
-
BufferedInputStream
-
BufferedOutputStream
原始数据写入包装流
DataInputStream
DataOutputStream
例如:
short a = 1;
try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("Data"))) {
dataOutputStream.writeShort(a);
dataOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
该流将会把提供的数据按照某人的原始数据类型写入。把数据按类型写入,查看Data文件内容为:

可以看到其是完全使用原始数据的类型结构写入的。
打印包装流
PrintWriter
PrintStream
打印,用来装饰其他输出流。作用是将数据格式化输出。
对象包装流
ObjectInputStream
ObjectOutputStream
专门输出对象的序列化表示的,能够别输入输出的对象一定需要实现Serializeable接口。并且推荐手动指定序列化版本号。
File类
并没有IO方法,仅仅是用来表示文件路径。需要注意的是IDEA中java的根路径是项目文件的根路径。
有以下方法
exists 路径是否存在
mkdir 创建一层目录
mkdirs 创建多重目录
parentPath 获取父路径,以文本形式返回
getParentFile 获取父路径, 以File对象形式返回
getName 获取文件名
isDirectory 判断是否是一个目录
isFile 判断是否是一个文件
getLastModified 获取最后一次修改时间的时间戳
length 获取文件大小
listFiles 获取目录下所有子文件
其他
System.setOut方法可以 修改标准输出流为指定流

浙公网安备 33010602011771号