2013-08-15 4 views
1

파일 (Java 소스 파일)을 읽는 프로그램을 작성하고 해당 파일에서 지정된 값의 Arraylist를 만듭니다. Arraylist를 다른 결과 파일로 출력합니다.Java에서 PrintWriter를 사용하여 파일 만들기 및 해당 파일에 쓰기

새로운 결과 파일을 만들기 위해 PrintWriter를 사용하고 있습니다. 이건 내 프로그램의 요약 버전 :

ArrayList<String> exampleArrayList = new ArrayList<String>(); 
File actualInputFile = new File("C:/Desktop/example.java"); 

PrintWriter resultingSpreadsheet= new PrintWriter("C:/Desktop/SpreadsheetValues.txt", "UTF-8"); 

FileReader fr = new FileReader(actualInputFile); 
BufferedReader br = new BufferedReader(fr); 
String line=null; 

while ((line = br.readLine()) != null) { 
// code that makes ArrayList 
} 

for (int i = 0; i < exampleArrayList.size(); i++) { 
     resultingSpreadsheet.println(exampleArrayList.get(i)); 
} 
resultingSpreadsheet.close(); 

문제는 내가이 프로그램을 실행할 때, 아무것도 resultingSpreadsheet에 인쇄 않겠다는 것이다. 그것은 완전히 비어 있습니다.

하지만,이 프로그램은 내가 교체 할 때 (가 resultingSpreadsheet 파일에 제대로 모든 것을 출력을 의미) 완벽하게 작동합니다 :

File actualInputFile = new File("C:/Desktop/example.java"); 

내가 내 입력 파일로 원하는 파일 인, 그리고이있는 정말 된 .java 소스 파일의 단지 작은 예 .txt 인 버전입니다, 그것은 1.08 KB의 크기가

File smallerInputFile = new File("C:/Desktop/smallerExample.txt"); 

481 KB,와 의 크기입니다.

PrintWriter를 플러시하고, FileWriter를 감싸며, .java 파일의 모든 코드를 확장 파일에 텍스트 파일로 복사하여 복사하는 등 몇 가지 시도를 해봤지만 문제는 아닙니다. 일하다. PrintWriter가 만드는 파일의 크기 때문에 필히 필 요하다고 생각하기 시작했으나 문제가되지 않을 수도 있습니다. 아마도 나는 모든 것을 스트림에 담을 필요가 있습니다 (여기에 : http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html)? 그렇다면 어떻게해야합니까?

더 큰 actualInputFile을 읽고 데이터를 올바르게 출력하는 이유는 무엇입니까? smallerInputFile이 제대로 작동하면 어떻게됩니까? 누구든지 도움이 될 수 있습니까?

+0

예외 처리 방법을 표시하지 않았습니다. 자바 파일을 가지고 있습니까? –

답변

1

Excel 시트에 쓰는 동안 예외가 있는지 확인하십시오. 왜냐하면 저는 실제로 크기 문제를 생각하지 않기 때문입니다. 아래는 성공적으로 실행되는 샘플 코드이며 파일 크기는 약 1MB입니다.

public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    BufferedReader br = null; 

    try { 

     String sCurrentLine; 

     br = new BufferedReader(new FileReader("D:\\AdminController.java")); 

     while ((sCurrentLine = br.readLine()) != null) { 
      System.out.println(sCurrentLine); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (br != null)br.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

} 
0

의견으로 남겨 두어야하지만 담당자가 없습니다. 이 문서에는 쓰기 메서드와 인쇄 메서드가 모두 있습니다. 대신 write()를 사용해 보셨습니까? 나는 그것이 파일의 크기 의심

은, 당신이 하나가 .txt 인 테스트중인 두 개의 파일 사이에있을 수 있고, 다른 하나는 된 .java

편집이다 : 두의 아마 두 번째 제안. 첫 번째는 필자가 문서에서 발견 한 것입니다.

0

PrintWriter의 메소드는 Exception을 발생시키지 않습니다. checkError() 메서드를 호출하면 스트림을 플러시 할뿐만 아니라 오류가 발생하면 true를 반환합니다. 예를 들어 인코딩 오류 인 대용량 파일을 처리하는 동안 오류가 발생했을 가능성이 큽니다.

0

프로그램을 확인하십시오. 파일이 비어 있으면 프로그램을 끝내기 전에 프로그램이 PrintWriter를 닫지 않는다는 것을 의미합니다. 예를 들어, 프로그램의 일부에서 결과 resultSpreadsheet.close()가 발생할 수 있습니다. 도망 간다.

관련 문제