2015-01-06 1 views
0

설명서를 저장할 수있는 작은 라이브러리 응용 프로그램을 작성했습니다. 지금까지 응용 프로그램이 기존 텍스트 파일에 저장할 수 있도록 코드를 구현했습니다. 사용자가 저장하고 덮어 쓰지 않을 때마다 동일한 파일을 업데이트하고 싶습니다.Java - txt 파일에 저장하면 첫 번째 항목이 중복됩니다.

현재 설명서를 하나 입력하고 라이브러리를 저장하면 텍스트 파일이 업데이트됩니다.

enter image description here

: 나는 도서관에 두 번째 매뉴얼을 추가한다면 다음 첫 번째 설명서는 텍스트 파일 여기

에 중복 저장하는 두 번째 매뉴얼이 추가 된 후 텍스트 파일의 예입니다 여기에 코드를 내가 저장 사용하고 있습니다 :

//Choice 7: Save Library: 

if(Menu.menuChoice == 7 && Library.ManualList.isEmpty()){ 
    System.out.println(Messages.addManualFirst); 
    Menu.displayMenu(); 
} 

else if(Menu.menuChoice == 7){ 
    Library.displayManualList(); 
    boolean saveYesNo = Console.readYesNo("\nThe ManualKeeper® app is able to save your current library to a '.txt' \nfile in your workspace directory.\n\nWould you like to save the current library? (Y/N):\n"); 
    if(saveYesNo){ 
     try { 
      FileWriter fw = new FileWriter("Library.txt", true); 
      PrintWriter pw = new PrintWriter(fw); 

      for (int i = 0; i < Library.ManualList.size(); i++){ 
       pw.println("-------------------- Index Number: " + i + " --------------------"); 
       pw.println(Library.ManualList.get(i).displayManual()); 
       pw.println("---------------------------------------------------------\n"); 
      } 
      pw.close(); 
     } catch (IOException e) { 
      System.out.println("Error! Library unable to save."); 
     } 
     System.out.println("\n\n--------------------------------------------------------------------------"); 
     System.out.println("\n        Library saved!\n"); 
     System.out.println("--------------------------------------------------------------------------\n"); 
    } 
    else if(saveYesNo){ 
     System.out.println("\n"); 
    } 
    Menu.displayMenu(); 

} 

사람이 내가 복제 중지하는 최초의 매뉴얼을 얻을 수있을 수있는 방법을 알고 있으면 알려 주시기 바랍니다 :

+0

displayManual() 메소드의 코드도 제공 할 수 있습니까? –

답변

1

저는 약간 혼란 스럽습니다. 파일을 덮어 쓰지 않으려 고하고 싶다고 말하면 추가하려고합니다. 그리고 그것은 정확히 무슨 일이 일어나고 있는지입니다.

PrintWriter가 기존 파일에 추가됩니다. 그래서 저는 여러분의 첫 번째 실행에서 초기 '인덱스 0'블록을 생성한다는 것을 가정하고 있습니다. 후속 실행에서 파일에 추가하여 첫 번째 항목을 복제합니다.

File file = new File("Library.txt"); 
file.delete(); 
file.createNewFile(); 
FileWriter fw = new FileWriter(file, true); 

그러나 귀하의 질문에 설명 된 바와 같이, 당신이 발생하고있는 문제처럼 보인다는 정확하게 당신이 원하는 무엇인가 :

처음부터이 당신이 당신의 파일을 만들 수 있습니다 개체마다, 예를 방지합니다. .?

+0

이것은 복제를 중지하지만 다음 번 응용 프로그램이 시작될 때 동일한 "Library.txt"파일을 추가하고 싶습니다. 내가 이것을 할 수있는 방법이 있습니까? 지금 라이브러리에 설명서를 추가하면 앱을 저장하고 닫으면 모든 것이 정상입니다. 그러나 사용자가 응용 프로그램을 다시 시작하면 라이브러리 텍스트 파일 자체가 비워집니다! 이 정보를 중복되지 않고 텍스트 파일에 보관하려면 어떻게해야합니까? – Oscar

+0

우선, 프로그램이 시작될 때 Library.txt 파일의 내용을 유지하려면 프로그램이 초기화 될 때 파일의 내용을로드해야합니다. 기본적으로 파일 내용을 수동으로 다시 deserialize해야합니다. 그런 다음 라이브러리에 추가하십시오. 수동 목록. 그런 다음 목록을 파일에 다시 쓸 때 파일의 이전 내용과 프로그램 실행 중에 추가 된 내용이 모두 포함됩니다. – user3062946

관련 문제