자바 자기 -I / O 버퍼 흐름

자바 캐시 스트림의 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);
    }
}

추천

출처www.cnblogs.com/jeddzd/p/11758250.html