前言
本章为IO流的完结篇,主要介绍字符流。
介绍
字符流就是操作字符的,它的底层是通过字节流实现的,顶层类为:Reader、Writer都是抽象类,以下是它们的子类。注意:以下代码算是伪代码,记得处理异常。
FileReader、FileWriter
文件字符流是跟文件打交道的,有参构造方法需要文件路径或者File对象,其他的构造就不写了
//流的使用
//构造
// FileWriter fileWriter = new FileWriter(("c:/d.txt");可以直接访问文件路径
FileWriter fileWriter = new FileWriter(new File("c:/d.txt"));
//写
fileWriter.write("aaaaaaaaaaa");
fileWriter.close();
FileReader fileReader = new FileReader(new File("c:/d.txt"));
//读
int readline = -1;
//这里面读到的是是int值需要转为char
while ((readline = fileReader.read()) != -1) {
System.out.println((char) readline);
}
fileReader.close();
BufferedReader、BufferedWriter
从上面的流可以看出无论是读还是写都只能一个一个的进行操作,而使用了缓冲字符流可以让我们一行一行的读写,可以提高效率。同时BufferedWriter还提供了特有的换行功能。
//流的使用
//构造
BufferedReader reader = new BufferedReader(new FileReader(new File("c:/xx.txt")));
BufferedWriter writer = new BufferedWriter(new FileWriter(new File("c:/xx.txt")));
//读写
String line = null;
// 取出字符串,读写
while ((readLine = reader.readLine()) != null) {//读完返回null
line = readLine;
writer.write(line);
writer.newline();//换行
}
reader.close();
writer.close();
InputStreamReader、OutputStreamWriter
InputStreamReader是字节流通向字符流的桥接,而OutputStreamWriter是字符流通向字节流的桥接,说实话我也不是很懂,反正返回的流可以当做字符流用,也就是可以将字节流转为字符流。
而它们的构造里需要字节流,如果还需要读写操作用缓冲字符流包裹即可。
//流的使用
//构造
InputStreamReader reader=new InputStreamReader(new FileInputStream(new File("c:/xx.txt")));
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(new File("c:/xx.txt")));
PrintWriter
打印流,只有输出流。有了这个可以代替上面的输出流,不用那么麻烦的去包装流了。由于它的构造里可以有很多流所以为很多流添加了输出功能,它是以输出为目的的,不负责数据源。关于它的异常不涉及IO异常。
//流的使用
//构造
PrintWriter pw1=new PrintWriter("c:/xx.txt");//可以直接操作文件路径
PrintWriter pw2=new PrintWriter(new File("c:/xx.txt"));
PrintWriter pw3=new PrintWriter(new FileWriter("c:/xx.txt"));//参数可以为Writer
PrintWriter pw4=new PrintWriter(new FileOutputStream(new FileOutputStream(new File("c:/xx.txt")));//参数可以为OutputStream
打印流的print和write都可以完成写操作,然而还是有区别的
pw1.write(97);//实际写到文件会编码成'a'
pw1.print(97);//你写啥它写啥
pw1.println("aaa");//可以直接换行了,比包装流强多了
总结
IO流篇完结,接下来努力看看集合的源码,加油!