Java基础笔记—第八篇(I/O流)

**

Java基础笔记—第八篇(I/O流)

**
Java基础笔记—第八篇(I/O流)

字符流和字节流区别:
a. 字节流读取时,读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(2个字节的unicode字符)先去查找指定的编码表,将查到的字符返回。
b. 字节流可以处理所有类型的数据。如图片、mp3、avi,而字符流只处理字符数据。
c. 只要处理纯文本数据,就优先考虑使用字符流,除此都用字节流。

Reader中常见方法

  • int read(); //读取一个字符,返回读到的字符,如果读到流的末尾,返回-1
  • int read(char[] c); //将读到的字符存入指定数组中,返回读到字符个数,如果读到流的末尾,返回-1
  • close(); 资源释放

Writer中常见方法

  • writer(ch); //将字符写入
  • writer(char[] c); //将字符数组写入
  • writer(String); //将字符串写入
  • flush(); //刷新流,将流中的数据刷新到目的地
  • close(); //关闭资源,在关闭前先调用flush()

FileWriter:该类没有特有的方法,只有自己的构造函数

  • 用于处理文本文件;
  • 有默认的编码表;
  • 有临时缓冲。

对于读取、写入流对象的构造函数,以及读写方法,刷新、关闭都会抛出IoException或其子类。

当指定绝对路径时,定义目录分隔符有两种:

  1. 反斜线,但是一定要两个:new FileWriter(“c:\demo.txt”);
  2. 斜线,写一个即可:new FileWriter(“c:/demo.txt”);

字符流的缓冲区:缓冲区的出现提高了对流的操作效率(原理:将数组进行封装)

  • BufferedWriter——newLine():跨平台的换行符
  • BufferedReader——readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null。

使用缓冲区对象目的:缓冲的存在是为了增强流的功能,所以在建立缓冲区对象时,要先有流对象存在,缓冲内部就是使用流对象的方法,只是加入了数组对数据进行临时存储。

//写入缓冲区对象:
BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt"));//将流对象作为参数传递给缓冲区的构造函数
bufw.write("abcw");
bufw.flush();
bufw.close();

//读取缓冲区对象:
BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));
String line = null;
while((line = bufr.readline())!=null){
	System.out.println(line);
}

readline()原理:实质用的还是关联的流对象的read方法,只不过,在每次读到一个字符时,先不进行具体操作,先进行临时存储,当读取到回车标记时,将临时容器中存储的数据一次性返回。

字节流

byte[] bt = new byte[fis.avaiable()]创建一个刚刚好的缓冲区(弊端:文件过大,大小超出jvm内存范围,内存溢出)

转换流

InputStreamReader 字节—>字符 InputStreamReader(InputStream);
OutputStreamWriter 字符—>字节

File类

    File(String filename);
    //目录分隔符File.separator
    File file = new File("c:"+File.separator+"abc"+File.separator+"a.txt");