2013-06-21 5 views
2

몇 가지 이유로, 내 프로그램에 새 BufferedWriter 및 FileWriter를 만들 때 (아직 아무 것도 쓰지 않았더라도) 모든 텍스트를 선택한 파일이 지워집니다.어떤 이유로 FileWriter 및 BufferedWriter 지우기 파일을 사용합니까?

selectedFile은 JFileChooser에 의해 결정됩니다.

public static File selectedFile; 

    public static void Encrypt() throws Exception { 

    try { 
     //if I comment these two writers out the file is not cleared. 
     FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 

     List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()), 
       Charset.defaultCharset()); 
     for (String line : lines) { 
      System.out.println(line); 
      System.out.println(AESencrp.encrypt(line)); 

      /*file is cleared regardless of whether or not these are commented out or 
      * not, as long as I create the new FileWriter and BufferedWriter the file 
      * is cleared regardless.*/ 

      //bw.write(AESencrp.encrypt(line)); 
      //bw.close(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

AESencrp.encrypt는 내가 가지고있는 암호화 클래스 일 뿐이며 영향을 미치지 않습니다. 새로운 FileWriter와 BufferedWriter를 만들면이 루프도 실행되지 않습니다. (적어도 필자는 그렇게 믿지 않습니다. 필자는 줄의 암호화 나 파일의 원래 내용을 얻지 못했고, t는 새로운 FileWriter/BufferedWriter의를 만들었습니다.)

 for (String line : lines) { 
      System.out.println(line); 
      System.out.println(AESencrp.encrypt(line)); 

      /*file is cleared regardless of whether or not these are commented out or 
      * not, as long as I create the new FileWriter and BufferedWriter the file 
      * is cleared regardless.*/ 

      //bw.write(AESencrp.encrypt(line)); 
      //bw.close(); 
     } 

답변

3

이 이미 존재하는 경우 FileWriter의 생성자는 자릅니다에게 파일을 사용하고 있기 때문입니다.

대신 데이터를 추가하려면

는 사용

new FileWriter(theFile, true); 
0

당신은 (추가 옵션으로 생성자를 사용하여 추가 용) 쓰기 위해 엽니 다. 그 밖의 다른 일이 무엇을 기대합니까? 더 이상 당신의 코멘트 close()은 잘못된 위치에 있습니다. 루프 외부에 있어야합니다.

2

파일에 추가하고 덮어 쓰지 않는 것처럼 들립니다. 적절한 FileWriter constructor that takes a boolean on whether to append을 사용하십시오. boolean없이

FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile(), true); 

사용하는 생성자, 는, 디폴트 모드 "덮어 쓰기"합니다. 덮어 쓰기 모드에서 FileWriter을 만들면 파일을 지워 처음부터 쓰기 시작할 수 있습니다.

두 번째 인수로 true을 전달하면 덮어 쓰기 대신 추가 할 수 있습니다.