ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[toc] ## 1. FileInputStream类与FileOutputStream类 FileInputStream类与FileOutputStream类用来向磁盘文件进行读取和写入,数据的单位是字节。 ```java public class FileIOStreamTest { @Test public void writeAndRead() { File targetFile = new File("E:\\temp\\word.txt"); /**** 向文件 E:\temp\word.txt 写入数据 ****/ try { OutputStream out = new FileOutputStream(targetFile); String content = "我有一只小毛驴,但我从来不骑!"; byte[] writeByte = content.getBytes(); // 将数据写入文件中 out.write(writeByte); out.close(); } catch (IOException e) { e.printStackTrace(); } /**** 读取文件 E:\temp\word.txt ****/ try { InputStream in = new FileInputStream(targetFile); byte[] readByte = new byte[1024]; // 将数据读取到 readByte 中。在读取完文件后,read函数返回 -1 while (in.read(readByte) != -1) { System.out.println(new String(readByte, "UTF-8")); } in.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` <br/> ## 2. FileReader类与FileWriter类 FileReader类与FileWriter类分别用来向文件读取和写入数据,数据单位是字符。汉字在文件中占用2个字节,如果使用字节流搞不好会出现乱码。 ```java public class FileRWTest { @Test public void readAndWrite() { File targetFile = new File("E:\\temp\\word.txt"); /**** 向文件 E:\temp\word.txt 写入数据 ****/ try { FileWriter out = new FileWriter(targetFile); String content = "FileWriter负责写入,FileReader负责读取。"; out.write(content); out.close(); } catch (IOException e) { e.printStackTrace(); } /**** 读取文件 E:\temp\word.txt ****/ try { FileReader in = new FileReader(targetFile); char readByte[] = new char[1024]; // 将数据读取到 readByte 中。在读取完文件后,read函数返回 -1 while (in.read(readByte) != -1) { System.out.println(new String(readByte)); } in.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` <br/> ## 3. BufferedInputStream类与BufferedOutputStream类 BufferedInputStream类与BufferedOutputStream类分别用来向文件读取和写入数据,数据单位是字节。 <br/> 这两个类拥有**缓存区**的功能,可以提高文件读取和写入的性能。最优的缓存区大小取决于操作系统,内存空间和机器配置,默认为32位。 ```java public class BufferedIOStreamTest { @Test public void readAndWrite() { File targetFile = new File("E:\\temp\\word.txt"); /**** 向文件 E:\temp\word.txt 写入数据 ****/ try { OutputStream out = new FileOutputStream(targetFile); OutputStream bufOut = new BufferedOutputStream(out); String writeDatas[] = {"好久不见,", "最近好吗?", "常联系。"}; for (String data : writeDatas) { bufOut.write(data.getBytes()); } bufOut.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } /**** 读取文件 E:\temp\word.txt ****/ try { InputStream in = new FileInputStream(targetFile); InputStream bufIn = new BufferedInputStream(in); byte[] readByte = new byte[1024]; // 将数据读取到 readByte 中。在读取完文件后,read函数返回 -1 while (bufIn.read(readByte) != -1) { System.out.println(new String(readByte, "UTF-8")); } bufIn.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` <br/> ## 4. BufferedReader类与BufferedWriter类 BufferedReader类与BufferedWriter类分别用来向文件读取和写入数据,数据单位是字符。 <br/> 这两个类拥有**缓存区**的功能,可以提高文件读取和写入的性能。最优的缓存区大小取决于操作系统,内存空间和机器配置,默认为32位。 ```java public class BufferedRWTest { @Test public void readAndWrite() { File targetFile = new File("E:\\temp\\word.txt"); /**** 向文件 E:\temp\word.txt 写入数据 ****/ try { FileWriter out = new FileWriter(targetFile); BufferedWriter bufOut = new BufferedWriter(out); String writeDatas[] = {"好久不见,", "最近好吗?", "常联系。"}; for (String data : writeDatas) { bufOut.write(data); // 换行 bufOut.newLine(); } bufOut.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } /**** 读取文件 E:\temp\word.txt ****/ try { FileReader in = new FileReader(targetFile); BufferedReader bufIn = new BufferedReader(in); String content = null; int index = 0; while ((content = bufIn.readLine()) != null) { index++; System.out.println("第" + index + "行:" + content); } bufIn.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` <br/> ## 5. DataInputStream类和DataOutputStream类 DataInputStream类和DataOutputStream类也是用来向文件读取和写入数据。不同于前面4种输入输出类的是:它不需要关心数据的单位是字节,还是字符。 <br/> 如果调用 DataOutputStream 的 writeXXX 方法写入字符串,则必须使用 DataInputStream 对应的 readXXX 方法将字符串取出来。 ``` public class DataIOStreamTest { @Test public void readAndWrite() { try { FileOutputStream fos = new FileOutputStream("E:\\temp\\word.txt"); DataOutputStream dos = new DataOutputStream(fos); String writeDatas[] = {"好久不见,", "最近好吗?", "常联系。"}; for (String data : writeDatas) { dos.writeUTF(data); } // 写入end作为结束符号 dos.writeUTF("end"); dos.writeBytes("writeBytes方法写入!"); dos.close(); fos.close(); FileInputStream fis = new FileInputStream("E:\\temp\\word.txt"); DataInputStream dis = new DataInputStream(fis); String content = null; // 上面使用 writeUTF 方法写入数据,则读取时需要调用 readUTF 读取 // 其他的 readXXX 方法是读取不到的,所以这里读取不到内容 `writeBytes方法写入!` while (!(content = dis.readUTF()).equals("end")) { System.out.println(content); } //好久不见, //最近好吗? //常联系。 dis.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ```