IO流
I:input,输入
O:output,输出
-
什么是流:
-
流是一组有顺序,有起点和终点的字节结合,是对数据传输的总称或抽象。
-
-
分类:
-
按处理数据类型的不同,分为字节流和字符流
-
字节流:压缩包、视频、图片等
-
字符流:主要用来操作纯文本
-
-
按数据流向的不同,分为输入流和输出流(入和出是相对于内存的)
-
按功能不同,分为节点流和处理流
-
节点流:直接操作数据源
-
处理流:对其他流进行处理
-
-
-
抽象类定义
分类 字节流 字符流 输入流 InputStream Reader 输出流 OutputStream Writer
节点流
-
InputStream 字节输入流
//绝对路径:D:\a.txt //FileInputStream fileInputStream=new FileInputStream("D:/a.txt"); //相对路径:./ 定位到当前项目 //./src\com\tledu\process\day_21 //read()方法:返回的是字符的ASCII码,返回-1代表读到了末尾 FileInputStream fileInputStream=new FileInputStream("./src/com/tledu/process/day_20/Room.java"); int read=0; while ((read=fileInputStream.read())!=-1){ System.out.print((char) read); } fileInputStream.close();
-
Reader 字符输入流
// 处理纯文本 try ( FileReader fileReader=new FileReader("./src/com/tledu/process/day_20/Room.java")){ int read=0; while ((read=fileReader.read())!=-1){ System.out.print((char) read); } } catch (IOException e) { e.printStackTrace(); }
-
OutputStream 字节输出流
-
输出流可以自动创建文件,但不能创建文件夹
-
默认是覆盖,如果想追加,在构造方法第二个参数传true,默认是false
// 输出流可以自动创建文件,但是不能帮你创建文件夹 // 默认是覆盖,如果想追加,在构造方法第二个参数传true,默认是false就是覆盖 try( FileOutputStream fileOutputStream=new FileOutputStream("D:/b.txt",false)) { // fileOutputStream.write(97); // fileOutputStream.write(98); // fileOutputStream.write(99); String a="你好啊"; byte[] bytes = a.getBytes(); fileOutputStream.write(bytes); } catch (IOException e) { e.printStackTrace(); }
-
-
Writer 字符输出流
try (FileWriter fileWriter=new FileWriter("./src/com/tledu/process/day_21/b.txt");){ fileWriter.write(97); fileWriter.write("我很好"); String a="十分感谢"; fileWriter.write(a.toCharArray()); } catch (IOException e) { e.printStackTrace(); }
缓冲流
-
特点:
-
主要是为了提高效率而存在的,减少物理读取次数
-
提供readLine()、newLine()这样的便捷的方法(针对缓冲字符流)
-
在读取和写入时,会有缓存部分,调用flush为刷新缓存,将内存数据写入到磁盘
-
-
分类 字节流 字符流 文件输入流 BufferedInputStream BufferedReader 文件输出流 BufferedOutputStream BufferedWriter -
readLine()方法:一次性读取一行数据,当返回null时,说明读取到末尾