자바 캐시 스트림의 BufferedReader,의 PrintWriter
하드 디스크에 중간, 예를 들어, 의료 과실 바이트 스트림과 문자 스트림 :
각 액세스시, 하드 디스크에 액세스합니다. 시간이 읽고 상대적으로 높은 주파수의 성능 저하를 작성하는 경우.
위의 단점, 캐시 스트림의 사용을 해결합니다.
읽기 버퍼 흐름이 때 한 시간이 캐시에 더 많은 데이터를 읽는 읽기가 완료 될 때까지 각 읽은 후, 캐시에 액세스 할 수 있습니다, 캐시 데이터는 다음 하드 디스크와 읽기.
, 먹고 싶은 각각의 입 냄비 삽로 이동합니다 후 캐시가 없습니다 . 캐시는 먼저 그릇에 쌀을 가득 그릇이 완료, 다음 냄비 삽
버퍼까지 데이터를 기록하는 스트림 버퍼는 데이터를 제 1 버퍼에 기록 될 일정량 도달 만 다음 데이터가 함께 하드 디스크에 기록된다 . 같은 동작 모드에서는, 바이트 스트림, 문자 스트림처럼되지 각 바이트의 하드 디스크 액세스를 작성 하여, IO 동작을 줄일
실시 예 1 : 판독 캐시 데이터 스트림을 이용하여
데이터의 문자 입력 스트림 캐시 라인은 한 번 읽을 수의 BufferedReader
package stream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TestStream {
public static void main(String[] args) {
// 准备文件lol.txt其中的内容是
// garen kill teemo
// teemo revive after 1 minutes
// teemo try to garen, but killed again
File f = new File("d:/lol.txt");
// 创建文件字符流
// 缓存流必须建立在一个存在的流的基础上
try (
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
)
{
while (true) {
// 一次读一行
String line = br.readLine();
if (null == line)
break;
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
예 2 : 캐시 쓰기 데이터 스트림을 사용하여
의 PrintWriter 출력 스트림 버퍼 자, 당신은 데이터의 한 줄을 쓸 수 있습니다
package stream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestStream {
public static void main(String[] args) {
// 向文件lol2.txt中写入三行语句
File f = new File("d:/lol2.txt");
try (
// 创建文件字符流
FileWriter fw = new FileWriter(f);
// 缓存流必须建立在一个存在的流的基础上
PrintWriter pw = new PrintWriter(fw);
) {
pw.println("garen kill teemo");
pw.println("teemo revive after 1 minutes");
pw.println("teemo try to garen, but killed again");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
예 3 : 플러시
때때로, 당신은 할 필요가 즉시 하드 디스크에 데이터를 기록 하지 않고 쓰기 버퍼가 밖으로 가득 찰 때까지 기다리지 않고,. 이 시간은 당신이 플러시를 사용할 필요가
package stream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestStream {
public static void main(String[] args) {
//向文件lol2.txt中写入三行语句
File f =new File("d:/lol2.txt");
//创建文件字符流
//缓存流必须建立在一个存在的流的基础上
try(FileWriter fr = new FileWriter(f);PrintWriter pw = new PrintWriter(fr);) {
pw.println("garen kill teemo");
//强制把缓存中的数据写入硬盘,无论缓存是否已满
pw.flush();
pw.println("teemo revive after 1 minutes");
pw.flush();
pw.println("teemo try to garen, but killed again");
pw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
운동 : 댓글이 제거
자바 주석 파일을 제거하는 방법을 설계
public void removeComments(File javaFile)
예를 들어, 주석 행에서 //로 시작
File f = new File("d:/LOLFolder/LOL.exe");
System.out.println("当前文件是:" +f);
//文件是否存在
System.out.println("判断是否存在:"+f.exists());
//是否是文件夹
System.out.println("判断是否是文件夹:"+f.isDirectory());
참고 : 다시 댓글 또는 / ** / 스타일의 주석, 일시적으로 치료하는 경우
대답 :
package stream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestStream {
public static void removeComments(File javaFile) {
StringBuffer sb = new StringBuffer();
//读取内容
try (FileReader fr = new FileReader(javaFile); BufferedReader br = new BufferedReader(fr);) {
while (true) {
String line = br.readLine();
if (null == line)
break;
//如果不是以//开头,就保存在StringBuffer中
if (!line.trim().startsWith("//"))
sb.append(line).append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try (
FileWriter fw = new FileWriter(javaFile);
PrintWriter pw = new PrintWriter(fw);
) {
//写出内容
pw.write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
File javaFile = new File("E:\\project\\j2se\\src\\character\\MyStringBuffer2.java");
System.out.println(javaFile.exists());
System.out.println(javaFile.length());
removeComments(javaFile);
}
}