2014-12-06 1 views
0

텍스트 파일을 사용하는 작업 응용 프로그램이 있으며 깔끔하고 쓸모있을 때까지 단계적으로 수정합니다. 모든 단계에서 파일을 가져 와서 수정 한 다음 다음 파일을 버퍼링 할 파일을 뱉어냅니다.파일에 대해 BufferedReader를 사용하여 문자열로 변경

나는 더 깨끗하게 만들려고 노력 중이므로 첫 번째 파일을 제외하고 파일을 가져 오는 것을 중지하고 앱 아래로 출력을 문자열로 전달합니다. 이 코드를 사용하면 어떻게 할 수 있습니까?

이것은 두 번째 단계입니다.

try { 
       BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("C:/Stage_Two.txt"))); 
       StringBuffer stringBuffer = new StringBuffer(); 
       String line; 
       while ((line = bufferedReader.readLine()) != null) { 
        Pattern pattern = Pattern.compile("ALL|MESSAGE|Time|PAPER_MAIN|GSP"); 
        if (pattern.matcher(line).find()) { 
         continue; 
        } 
        stringBuffer.append(line); 
        stringBuffer.append("\n"); 
       } 
       BufferedWriter bwr = new BufferedWriter(new FileWriter(new File("C:/Stage_Three.txt"))); 
       bwr.write(stringBuffer.toString()); 
       bwr.flush(); 
       bwr.close(); 
       // to see in console 
       //System.out.println(stringBuffer); 
      } catch (IOException e) { 
      } 

내가 InputStream, InputStreamReader 및 Reader ...를 들여다 보았습니다.하지만 그 중 하나가 넘어지지 않는 것 같으면요.

+0

코드 검토를 찾고 계십니까? –

+0

아니요, 파일을 끌어 당기는 변경을 문자열을 사용하는 방향으로 지정합니다. –

+0

* 데코레이터 패턴 *에 대해 알아보십시오. 이러한 "수정 자 클래스"와 관련이없는 다른 구성 요소가 파일 읽기 및/또는 인쇄에주의해야한다고 생각하십시오. – Tom

답변

0

문자열을 정리하는 방법을 잘 모르겠습니다. 독자와 작가를 사용하면 메모리에 모든 것을 넣을 필요가 없다는 이점이 있습니다. 다음 코드는 매우 큰 파일을 처리하도록합니다.

public void transformFile(File in, File out) throws IOException { 

    /* 
    * This method allocates the resources needed to perform the operation 
    * and releases them once the operation is done. This mechanism is know 
    * as a try-with-resource. After the try statement exits, the resources 
    * are closed 
    */ 

    try (BufferedReader bin = new BufferedReader(new FileReader(in)); 
      Writer bout = new FileWriter(out)) { 

     transformBufferedReader(bin, bout); 
    } 
} 

private void transformBufferedReader(BufferedReader in, Writer out) throws IOException { 
    /* 
    * This method iterates over the lines in the reader and figures out if 
    * it should be written to the file 
    */ 

    String line = null; 
    while ((line = in.readLine()) != null) { 
     if (isWriteLine(line)) writeLine(line, out); 
    } 
} 

private boolean isWriteLine(String line) throws IOException { 

    /* 
    * This tests if the line should be written 
    */ 

    return !line.matches("ALL|MESSAGE|Time|PAPER_MAIN|GSP"); 
} 

private void writeLine(String line, Writer writer) throws IOException { 

    /* 
    * Write a line out to the writer 
    */ 

    writer.append(line); 
    writer.append('\n'); 
} 

문자열 사용을 주장하는 경우 다음 방법을 추가 할 수 있습니다.

public String transformString(String str) { 
    try (BufferedReader bin = new BufferedReader(new StringReader(str)); 
      Writer bout = new StringWriter()) { 

     transformBufferedReader(bin, bout); 
     return bout.toString(); 
    } catch (IOException e) { 
     throw new IllegalStateException("the string readers shouln't be throwing IOExceptions"); 
    } 
} 
+0

나는 그것을 좋아한다 Isaiah! –

관련 문제