2015-01-04 69 views
0

我工作的一個小圖書館應用程序,允許用戶存儲,借閱,歸還和刪除技術手冊。爪哇 - 保存爲文本文件

我幾乎完成了應用程序,現在我希望啓用庫,一旦用戶從主菜單中選擇選項1,查看整個庫被自動保存到外部txt文件。我試圖實現正確的代碼,但現在沒有文本文件正在創建。

這裏是我的手工課的相關代碼:

  if(Menu.menuChoice == 1 && Library.ManualList.size() > 0){      
       Library.displayManualList(); 
       Menu.displayMenu(); 
       try { 
        FileWriter fw = new FileWriter("Library.txt"); 
        PrintWriter pw = new PrintWriter(fw); 

        pw.println(Library.ManualList); 

        pw.close(); 
       } catch (IOException e) { 
        out.println("Error! Library unable to save."); 
       } 
      } 

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

這裏是我的整個庫班如果需要的話:

public class Library { 

/** The Manual choice. */ 
public static int ManualChoice; 

static String returnManualTitle; 

/** The status1. */ 
static String status1 = "Available"; 

/** The status2. */ 
static String status2 = "Borrowed"; 

/** The Manual list. */ 
static ArrayList<Manual> ManualList = new ArrayList<Manual>(); 
static ArrayList<Manual> borrowedManuals = new ArrayList<Manual>(); 


/** 
* Adds the Manual. 
*/ 
static void addManual(){ 
    Manual newManual = new Manual(); //create new Manual object with status "Available." 
    newManual.createManual(); 
    ManualList.add(newManual);//add the Manual to the ManualList ArrayList. 
    System.out.println("\n\n--------------------------------------------------------------------------"); 
    System.out.println("\n       Manual added to library!\n"); 
    System.out.println("--------------------------------------------------------------------------\n"); 
} 

/** 
* Display Manual list. 
*/ 
static void displayManualList(){ 
    if (ManualList.isEmpty()){//If the library is empty, it goes back to main menu and choice. 
     System.out.println("-------------------------------------------------------------"); 
     System.out.println(Messages.empltyLibraryMessage + Messages.tryAgainMessage); 
     System.out.println("-------------------------------------------------------------"); 
     Menu.menuChoice = 7; 

    } else {  
     System.out.printf("\n\nHere are the Manual/s currently stored in the library:\n\n\n"); 
     for (int i = 0; i < ManualList.size(); i++){ 
      System.out.printf("-------------------- Index Number: %s --------------------\n",i); 
      System.out.println(ManualList.get(i).displayManual()); 
      System.out.println("---------------------------------------------------------\n"); 
     }//End of For Loop.   
    }// End of Else Statement.   
}//End of if Statement. 

static void displayBorrowedManuals(){ 
    if (ManualList.isEmpty()){//If the library is empty, it goes back to main menu and choice. 
     System.out.println("-------------------------------------------------------------"); 
     System.out.println(Messages.empltyLibraryMessage + Messages.tryAgainMessage); 
     System.out.println("-------------------------------------------------------------"); 
     Menu.menuChoice = 7; 

    } else {      
     for (int i = 0; i < borrowedManuals.size(); i++){ 
      System.out.printf("-------------------- Index Number: %s --------------------\n",i); 
      System.out.println(borrowedManuals.get(i).displayManual()); 
      System.out.println("---------------------------------------------------------"); 
     }//End of For Loop.   
    }// End of Else Statement.   
}//End of if Statement. 
/** 
* Borrow Manual. 
*/ 
public static void borrowManual(){ 
    if(ManualList.size() > 1){ 
     displayManualList(); 
    } 
    else if(ManualList.size() == 1){ 
     ManualList.get(ManualChoice).status = "Borrowed"; 
     ManualList.get(ManualChoice).borrower = User.userName; 
     ManualList.get(ManualChoice).borrowDate = "Today."; 
     ManualList.get(ManualChoice).returnDate = "In two weeks."; 
     borrowedManuals.add(ManualList.get(ManualChoice)); 
     System.out.printf("\n\nThere is only 1 manual present in the library.\n\nBecause of this, it has been automatically borrowed for you.\n\nHere is the manual which has been borrowed:\n\n %s\n\n", ManualList.get(ManualChoice).displayManual()); 
     System.out.println("Please return the Manual within two weeks!\n"); 
    } 
    //register user's Manual choice. 
    ManualChoice = (Console.readInteger(Messages.enterManualIndexMessage, Messages.ManualIndexNotInListMessage, 0, Library.ManualList.size() - 1)); 

    borrowLoop: 
    while(Menu.menuChoice == 3){ 
     //Check if the Manual to be borrowed is available. 
     //ManualChoice = (Console.readInteger(Messages.enterManualIndexMessage, Messages.ManualIndexNotInListMessage, 1, Library.ManualList.size())); 

     if ((ManualList.get(ManualChoice).status.equalsIgnoreCase(status1)) && (ManualList.size() >= ManualChoice)){ 
      //Print the borrowed Manual information and change the Manual status to borrowed. 
      ManualList.get(ManualChoice).status = "Borrowed"; 
      ManualList.get(ManualChoice).borrower = User.userName; 
      ManualList.get(ManualChoice).borrowDate = "Today."; 
      ManualList.get(ManualChoice).returnDate = "In two weeks."; 
      //Add the borrowed Manual to the borrowedManuals arraylist: 
      borrowedManuals.add(ManualList.get(ManualChoice)); 

      System.out.println("\n--------------------------------------------------------------------------"); 
      System.out.println("\n        Manual borrowed!\n"); 
      System.out.println("--------------------------------------------------------------------------\n"); 
      break borrowLoop; 

     }else if(ManualList.get(ManualChoice).status.equalsIgnoreCase(status2) && ManualList.size() >= ManualChoice){ 
      System.out.println("\n--------------------------------------------------------------------------"); 
      System.out.println("\n   " 
        + " The Manual you wish to borrow is already on loan."); 
      System.out.println("\n--------------------------------------------------------------------------\n"); 
      break borrowLoop; 

     }else if(ManualChoice > ManualList.size()-1){ 
      System.out.println(Messages.noSuchManualMessage); 
      break borrowLoop; 
     } 
    } 
    Menu.displayMenu(); 
} 

/** 
* Return Manual. 
*/ 
static void returnManual(){ 
    System.out.printf("\n\nHere are the Manual/s currently out on loan:\n\n"); 

    if(borrowedManuals.size() > 0){ 
    for (int i = 0; i < borrowedManuals.size(); i++) 
     System.out.println(borrowedManuals.get(i).displayManual()); 
     returnManualTitle = Console.readString(Messages.enterManualSerial, Messages.tooShortMessage, 3); 
    } 

    int x = 0; 
    boolean serialExistance = false; 
    while (x < ManualList.size()){//Search for the Manual by title, if it exists change it's status, 
           //it's borrower and borrowDate. 

     if (ManualList.get(x).serial.equalsIgnoreCase(returnManualTitle)){ 

      ManualList.get(x).status = "Available"; 
      ManualList.get(x).borrower = "N/A"; 
      ManualList.get(x).borrowDate = "N/A"; 
      ManualList.get(x).returnDate = "N/A"; 

      int p = 0; 
       while (p < borrowedManuals.size()) { 
        Manual borrowed = borrowedManuals.get(p); // guessing the name of this class 
        if (borrowed.serial.equalsIgnoreCase(returnManualTitle)) { 
         borrowedManuals.remove(p); 
         break; 
        } 
        p++; 
       }    
      System.out.println(Messages.successReturnMessage); 
      serialExistance = true; 

      break;//if a title is found, break out of the loop and display choice menu. 
     } 
     x = x+1; 
    }//end of while loop. 
    if(serialExistance == false){ 
     boolean repeatReturnManual = Console.readYesNo("\n--------------------------------------------------------------------------" + "\n\nThe Manual with the title "+"\""+returnManualTitle +"\""+ " wasn't found!" 
                 +"\n\nDo you want to try again? (Y/N):\n"); 
     System.out.println("\n--------------------------------------------------------------------------"); 
     if(repeatReturnManual){ 
      returnManual(); 
     } 
    }else if(serialExistance){ 
     Menu.menuChoice = 7; 
    }    
} 

/** 
* Removes the Manual. 
*/ 
public static void removeManual(){ 

    displayManualList(); 

    ManualChoice = Console.readInteger(Messages.enterRemoveManualIndex ,Messages.ManualIndexNotInListMessage, 0, ManualList.size());   
    int p = 0; 
    while (p < borrowedManuals.size()){//Search for the Manual by title, if it exists change it's status, 
     //it's borrower and borrowDate. 

     if (borrowedManuals.get(p).title.equalsIgnoreCase(returnManualTitle)){ 

      borrowedManuals.remove(p); 
     } 
    }    
    ManualList.remove(ManualChoice); 
    System.out.print(Messages.successRemovedManualMessages); 
    Menu.menuChoice = 7; 
} 

/** 
* Empty library. 
*/ 
static void emptyLibrary(){ 
    System.out.println("\n         WARNING!"); 
    System.out.println("\n   You have chosen to delete all Manuals in the library.\n"); 
    System.out.println("--------------------------------------------------------------------------"); 
    boolean emptyLibraryChoice = Console.readYesNo("\nAre you sure you wish to destroy the library? (Y/N): "); 
    System.out.println("\n--------------------------------------------------------------------------"); 
    if(emptyLibraryChoice){ 
     Library.ManualList.clear(); 
     System.out.println(Messages.successEmptyLibraryMesssage); 
     System.out.println("--------------------------------------------------------------------------\n\n"); 
     Menu.menuChoice = 7; 
     } 

} 

} 

如果有誰知道我如何能夠保存的內容庫到一個文本文件,請讓我知道,任何幫助表示讚賞:)我是相當新的Java的,所以如果我已經離開了所需的代碼,請讓我知道!

+0

您需要使用某種類型的循環,並從列表中文件寫入元素,以這樣的方式,可以在其中讀回後... – MadProgrammer

+0

@MadProgrammer非常感謝您的回覆,這聽起來非常具有挑戰性,但我會研究你的建議:)作爲我對Java的新手,你能否向我展示一個可行的解決方案? – Oscar

+0

'Manual'類是什麼樣的? – MadProgrammer

回答

0

嘗試一個循環將磁帶庫的每一個元素。

for(int i=0; i<Library.ManualList.size(); i++) 
    pw.println(Library.ManualLis.get(i)); 
pw.close();  
+0

非常感謝您的回答,你可以給我在實現這一點了更多的瞭解?我目前不太確定 – Oscar