输入流:数据从数据源(文件)到程序(内存)的路径。
输出流:数据从程序(内存)到数据源(文件)的路径。
FileReader 和 FileWriter
- 字符流,读取文件内容(字节流是FileInputStream,FileOutputStream)
package file;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Reader01 {
public static void main(String[] args) throws IOException {
String filePath = "e:\\hello.txt";
FileReader fileReader = null;
int readLen = 0;
char[] buf = new char[8]; //一次读8个
try {
fileReader = new FileReader(filePath);
//循环读取,返回实际读取到的字符数,如果返回-1,代表文件结束
while((readLen = fileReader.read(buf))!= -1){
System.out.print(new String(buf,0,readLen));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
fileReader.close();
}
}
// fileReader.write()可以写入
}
节点流和处理流
- 节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter。
- 处理流(包装流)是连接已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter。
处理流功能:
1.性能的提高,主要以增加缓冲的方式来提高输入输出效率。
2.操作的便捷,处理流提供方法一次输入输出大量的数据。
区别和联系:
-
节点流是底层流,直接和数据源相接。
-
处理流包装节点流,可以消除不同节点流的实现差异,提供跟方便的方法来完成输入输出。使用了修饰器设计模式,不会直接与数据源相连。
BufferedReader 和 BufferedWriter
public class bufferReader01 {
public static void main(String[] args) throws IOException {
String filePath = "e:\\hello.txt";
BufferedReader bufferedReader = null;
String line;
bufferedReader = new BufferedReader(new FileReader(filePath));
while((line = bufferedReader.readLine())!= null){
System.out.println(line);
}
bufferedReader.close();
}
}
public class bufferWriter01 {
public static void main(String[] args) throws IOException {
String filePath = "e:\\e.txt";
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
bufferedWriter.write("hello,world1");
bufferedWriter.newLine(); //换行
bufferedWriter.write("hello,world2");
bufferedWriter.close();
}
}