一、Java IO
Java 中传统的 IO 是面向流的 IO,分为输入流和输出流,输入输出流又分为字节流和字符流。字节流以字节为单位进行读写,字符流以字符为单位进行读写。
二、文件编码
utf-8:一个汉字三个字节,英文字母一个字节。
Unicode:一个汉字和英文字母都占两个字节。 Java程序的默认字符集是Unicode,在程序中声明的String类型的编码方式是和JVM编码方式相关的。
gbk:汉字占两个字节,英文字母占一个字节。
ANSI:汉字占两个字节,英文字母占一个字节。
三、File
File 类提供了对文件以及目录的操作,但是不包含对文件内容的操作。
1 | //递归读取文件名称 |
四、RandomAccessFile
该类能对文件内容进行随机访问读写,可以直接跳到访问位置,而IO流是按顺序读取字节,该类仅限于读写文件,不能像IO流一样,可以访问内存、网络和文件。
两种模式”rw”(读写) “r”(只读)。
1 | //直接追加内容 |
五、字节流
InputStream/OutputStream
InputStream /OutputStream 抽象类是所有字节输入流/字节输出流的超类。
1 | // 复制文件 |
基本实现类:FileInputStream/FileOutputStream
用于从文件中读取/写入字节,适用于读取图像数据等,如果想要读取字符,应考虑使用 FileReader 类。
DataInputStream/DataOutputStream
DataInputStream 继承 FilterInputStream 类,内部组合了一个 InputStream 类,提供了比 InputStream 更加方便的操作方法。
这里采用了装饰器模式来实现。
BufferedInputStream/BufferedOutputStream
提供了带缓存区的操作
六、字符流
Reader/Writer
所有字符输入/输出流的超类
基本实现类:InputStreamReader/OutputStreamWriter
InputStreamReader 提供 bytes 流到 char 流的转换,按照编码解析。
OutputStreamWriter 提供char 流到 bytes 流的转换,按照编码处理。
FileReader/FileWriter
FileReader/FileWriter 继承自 InputStreamReader/OutputStreamWriter。
BufferedReader
用于读取文本,可以一次读一行等。
1 | private static void insertNow() throws Exception { |
BufferedWriter/PrintWriter
一次写一行等,可直接写入字符串。
1 | private static void write(String content) throws IOException { |