2017-11-02 7 views
0

에 파일로 저장이에 대한 질문입니다. 내 문제는 메시지가 수신 되더라도, 내가 파일에 그들을 쓸 수 없습니다 오전 때문이다. 파일은 업데이트되었지만 비어 있습니다. 그러나 메시지는 인터페이스에 인쇄됩니다. 내가 원하는 것은 메시지가 파일 안에 있고, 인터페이스에 인쇄되어 있지 않다는 것입니다.메시지를 수신하고 현재 디렉토리

이 코드

public void receiveMessages() { 
    File file = new File ("msgs.txt"); 
    if (!file.exists()) { 
    try { 
    file.createNewFile(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
    PrintWriter printWriter = null; 
    try { 
    printWriter = new PrintWriter(file); 
    SealedObject encrypedSealedObject = null; 
    while(true){ 
    try { 
    String message = this.crypto.decryptMsg(encrypedSealedObject); 
    printWriter.println(message); 
    } 
    catch (IOException e) { 
    break; 
    } 
    } 
    } 
//catching exceptions ``here.... etc 

}

여러분의 도움에 감사드립니다에게있다!

+1

'PrintWriter'를 닫지 않거나 플러시하지 않습니다. –

+0

오 이런. 고마워! 나는 그것을 놓쳤다. 이 게시물을 삭제해야합니까? 나는 신입이다. –

답변

0
  • PrintWriter는 Flushable 인터페이스를 구현합니다.

플러시 가능은 플러시 할 수있는 데이터의 대상입니다. 수세식 방법 기본 스트림에 버퍼링 된 출력을 작성하기 위해 호출된다.

그래서, 당신은 파일에 출력을 세척해야합니다. 따라서 pw.flush()를 사용해야합니다.

  • 위 코드는 파일을 다시 쓰고 연속적인 메시지를 추가하지 않습니다. 이것이 귀하의 요구 사항이라면 OK입니다. 그러나, 나는 다음과 같은 제안 :

    PrintWriter pw = null; 
    if (appendToFile) { 
        pw = new PrintWriter(new FileWriter(filename, true)); 
    } else { 
        pw = new PrintWriter(new FileWriter(filename)); 
    } 
    
  • 당신이 IOException가 던지고있다 모두 문으로 2 시도 및 캐치를 사용할 필요가 없습니다합니다. Throwable을 포기하고 최상위 계층에서 오류를 처리하는 것이 좋습니다. 이는 우수 사례이며 유지 관리가 더 쉽습니다. 함수 호출은 논리를 수행해야합니다.