- 节点流低级流
1.字节输入流:
InputStream上定义了所有字节输入流都必须具备的读取操作: int read() 从流中读取一个字节,返回的int值只有"低八位"有效。但是如果返回的int值为 整数-1,则表达的是流读取到了末尾(不能再通过这个流读取到任何数据了)
FileInputStream fis = new FileInputStream("fos.dat");
int d = fis.read();
System.out.println(d);
fis.close();
2.字节输出流:
java.io.OutputStream: OutputStream上定义了所有输出流都应当具备的写出操作: void write(int d) 文件输出流常见的构造器 FileOutputStream(String path)//传递文件路径 FileOutputStream(File file)//传递文件名
FileOutputStream fos = new FileOutputStream("./fos.dat");
fos.write(1);
fos.close();
- 高级处理流
- 缓冲字节输入流:
缓冲流默认的缓冲区(内部维护了一个字节数组)大小为8kb 其提供的重载构造器可以修改缓冲区大小。 缓冲流是将读写操作统一转换为块读写来保证读写效率的。
FileInputStream fis = new FileInputStream("ppt.pptx"); BufferedInputStream bis = new BufferedInputStream(fis,1024*10); bis.close();
2.缓冲字节输出流:
FileOutputStream fos = new FileOutputStream("bos.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
String line = "super idol 的笑容都没你的甜~";
byte[] data = line.getBytes(StandardCharsets.UTF_8);
bos.write(data);
/*
flush方法实际上是在接口Flushable上定义的抽象方法,而字节输出流超类
java.io.OutputStream实现了该接口。这意味着所有字节输出流都具有该方法:flush
但是不是所有的高级流的flush都是做写出缓冲的,而是将flush动作传递下去。
最终传递到缓冲输出流上完成真实的flush操作
*/
bos.flush();
System.out.println("写出完毕!");
bos.close();
3.转换输入流和转换输出流:
衔接字节与字符流;
将读取(写出)的字符转化为字节
FileInputStream fis = new FileInputStream("./src/io/ISRDemo.java");
InputStreamReader isr = new InputStreamReader(fis);
FileOutputStream fos = new FileOutputStream("osw.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8);
4.缓冲字符输入流:
BufferedReader提供了一个独有的方法: String readLine() 该方法会返回读取到的一行字符串,返回的字符串中不含有最后的换行符。 如果单独读取了空行(这一行只有换行符),则返回值为空字符串 如果返回值为null,则表示流读取到了末尾。
FileInputStream fis = new FileInputStream("./src/io/BRDemo.java");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line;
while( (line = br.readLine()) != null ) {
System.out.println(line);
}
br.close();
5.缓冲字符输出流:
a.支持直接对文件写操作的构造器 PrintWriter(File file) PrintWriter(String path)
PrintWriter pw = new PrintWriter("./pw.txt","UTF-8");
pw.println("如果你突然打了个喷嚏,啊,那一定我在想你。");
pw.close();
上述构造器内部会进行四层流连接完成对文件的写出操作(如上图) PrintWriter提供了可以打开自动行刷新功能的构造器 当第一个参数为一个流时,就支持再传入一个boolean值,如果该值为true 则打开了自动行刷新,此时每当我们调用一次println方法,就会自动flush