title: Java - Saving to text file
body: <p>I am working on a small library application which allows the user to store, borrow, return and delete technical manuals.</p>
  
  <p>I have almost completed the application and now I wish to enable the library to be saved to an external txt file automatically once the user selects option 1 from the main menu, to view the whole library. I have tried to implement the correct code but right now no text file is being created.</p>
  
  <p>Here is the relevant code from my manual class:</p>
  
  <pre><code>            if(Menu.menuChoice == 1 &amp;&amp; Library.ManualList.size() &gt; 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 &amp;&amp; Library.ManualList.isEmpty()){
                  System.out.println(Messages.addManualFirst);
                  Menu.displayMenu();
              }
  </code></pre>
  
  <p>Here is my whole library class if needed:</p>
  
  <pre><code>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&lt;Manual&gt; ManualList = new ArrayList&lt;Manual&gt;();
  static ArrayList&lt;Manual&gt; borrowedManuals = new ArrayList&lt;Manual&gt;();
  
  
  /**
   * 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 &lt; 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 &lt; 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() &gt; 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)) &amp;&amp; (ManualList.size() &gt;= 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) &amp;&amp; ManualList.size() &gt;= 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 &gt; 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() &gt; 0){
      for (int i = 0; i &lt; 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 &lt; 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 &lt; 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 &lt; 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;
          }
  
  }
  
  }
  </code></pre>
  
  <p>If anyone knows how I might be able to save the contents of the library to a text file please let me know, any help is appreciated :) I am fairly new to Java so if I have left out needed code please let me know!</p>