字符流
字符输入
FileReader:文件字符输入流,以内存为基准,把磁盘文件的数据以字符的形式读入到内存,读取文本文件内容到内存中去
构造器:
public FileReader(File file)
:创建一个字符输入流与源文件对象接通。public FileReader(String filePath)
:创建一个字符输入流与源文件路径接通。
方法:
public int read()
:读取一个字符的编号返回,读取完毕返回 -1public int read(char[] buffer)
:读取一个字符数组,读取多少个就返回多少个,读取完毕返回 -1
结论:
- 字符流一个一个字符的读取文本内容输出,可以解决中文读取输出乱码的问题,适合操作文本文件,但是一个一个字符的读取文本内容性能较差
- 字符流按照字符数组循环读取数据,可以解决中文读取输出乱码的问题,而且性能也较好
字符流不能复制图片,视频等类型的文件。字符流在读取完了字节数据后并没有直接往目的地写,而是先查编码表,查到对应的数据就将该数据写入目的地。如果查不到,则码表会将一些未知区域中的数据去 map 这些字节数据,然后写到目的地,这样的话就造成了源数据和目的数据的不一致。
public class FileReaderDemo01{ public static void main(String[] args) throws Exception { // 创建一个字符输入流管道与源文件路径接通 Reader fr = new FileReader("demo/src/test.txt"); int ch; while((ch = fr.read()) != -1){ System.out.print((char)ch); } } } public class FileReaderDemo02 {//字符数组 public static void main(String[] args) throws Exception { Reader fr = new FileReader("demo/src/test.txt"); char[] buffer = new char[1024]; int len; while((len = fr.read(buffer)) != -1) { System.out.print(new String(buffer, 0 , len)); } } }
字符输出
FileWriter:文件字符输出流,以内存为基准,把内存中的数据按照字符的形式写出到磁盘文件中去
构造器:
public FileWriter(File file)
:创建一个字符输出流管道通向目标文件对象(覆盖数据管道)public FileWriter(String filePath)
:创建一个字符输出流管道通向目标文件路径public FileWriter(File file, boolean append)
:创建一个追加数据的字符输出流管道通向文件对象(追加数据管道)public FileWriter(String filePath, boolean append)
:创建一个追加数据的字符输出流管道通向目标文件路径
方法:
public void write(int c)
:写一个字符出去public void write(char[] buffer)
:写一个字符数组出去public void write(String c, int pos, int len)
:写字符串的一部分出去public void write(char[] buffer, int pos, int len)
:写字符数组的一部分出去fw.write("\r\n")
:换行
读写字符文件数据建议使用字符流
Writer fw = new FileWriter("demo/src/test.txt"); fw.write(97); // 字符a fw.write('b'); // 字符b fw.write("Java是最好玩的语言!"); fw.write("\r\n"); fw.close;