Java IO 缓存流
字节流和字符流每次读写都会访问硬盘,当读写频率增加其访问效率不高
而使用缓存流读取时会将大量数据先读取到缓存中,以后每次读取先访问缓存,直到缓存读取完毕再到硬盘读取,缓存流写入数据也是一样,先将数据写入到缓存区,直到缓存区达到一定的量,才把这些数据一起写道硬盘中去,这样减少了IO操作。
使用缓存流读数据
缓存字符输入流 BufferedReader 可以一次读取一行数据
package JavaIOTest;
import java.io.*;
public class BufferedIoTest {
public static void main(String[] args) {
File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
//创建基于文件对象的字符流
//缓存流必须建立在一个存在的流的基础上
try(
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
)
{
while(true){
String line = bufferedReader.readLine();
if (null == line)
break;
System.out.println(linea);
}
}catch (IOException e){
e.printStackTrace();
}
}
}
使用缓存流写数据
PrintWriter 缓存字符输出流, 可以一次写出一行数据
package JavaIOTest;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriterTest {
public static void main(String[] args) {
File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
try(
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
)
{
printWriter.println("清华大学");
printWriter.println("北京大学");
}catch (IOException e){
e.printStackTrace();
}
}
}
flush
有的时候,需要立即把数据写入到硬盘,而不是等缓存满了才写出去。 这时候就需要用到flush
package JavaIOTest;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriterTest {
public static void main(String[] args) {
File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
try(
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
)
{
printWriter.println("清华大学");
printWriter.flush();
printWriter.println("北京大学");
printWriter.flush();
}catch (IOException e){
e.printStackTrace();
}
}
}
练习:移除“//”形式的注释
package JavaIOTest;
import java.io.*;
public class RemoveNotesTest {
public static void main(String[] args) throws IOException {
File file = new File("d:/xyz/z/zzz/zzzz/notes.class");
removeNotes(file);
}
public static void removeNotes(File file) throws IOException{
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuilder stringBuilder = new StringBuilder();
while (true){
String line = bufferedReader.readLine();
if(null == line){
break;
}
else if (!line.trim().startsWith("//")){
stringBuilder.append(line);
stringBuilder.append("
");
}
}
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(stringBuilder.toString());
fileWriter.close();
bufferedReader.close();
fileReader.close();
}
}