javase 文件IO相关

IO流

IO流的分类

  1. 按流的方向分:输入流,输出流
  2. 读取数据的方式
    1. 按照字节读取 字节流
    2. 按照字符读取 文本流

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个字节/字符。

  1. BufferedReader

  2. BufferedWriter

  3. BufferedInputStream

  4. 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文件内容为:

image-20200616123532551

可以看到其是完全使用原始数据的类型结构写入的。

打印包装流

PrintWriter

PrintStream

打印,用来装饰其他输出流。作用是将数据格式化输出。

对象包装流

ObjectInputStream

ObjectOutputStream

专门输出对象的序列化表示的,能够别输入输出的对象一定需要实现Serializeable接口。并且推荐手动指定序列化版本号。

File类

并没有IO方法,仅仅是用来表示文件路径。需要注意的是IDEA中java的根路径是项目文件的根路径。

有以下方法

exists 路径是否存在

mkdir 创建一层目录

mkdirs 创建多重目录

parentPath 获取父路径,以文本形式返回

getParentFile 获取父路径, 以File对象形式返回

getName 获取文件名

isDirectory 判断是否是一个目录

isFile 判断是否是一个文件

getLastModified 获取最后一次修改时间的时间戳

length 获取文件大小

listFiles 获取目录下所有子文件

其他

System.setOut方法可以 修改标准输出流为指定流

原文地址:https://www.cnblogs.com/freesfu/p/13747358.html