Append to text file using PrintStream

13,006

What does MyFrame.ShowSaveDialog(); return? The key is to create a FileOutputStream with the appropriate constructor (the second parameter should be the boolean true) which will make it an appending FileOutputStream, and then construct your PrintStream using this FileOutputStream object.

For instance, if showSaveDialog() (note that method and variable names should begin with lower case letters) returns the name of a file or a File object, you could do something like so:

try {
  File file = myFrame.showSaveDialog(); // if this method returns a File!!!!!
  FileOutputStream fos = new FileOutputStream(file, true);
  PrintStream printStream = new PrintStream(fos);
  //.... etc
} catch(....) {
  // ....
}

Edit:
To apply this to your posted code above, do something like so:

   public static PrintStream showSaveDialog() {
      JFileChooser chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
            "Tekst filer", "txt");
      chooser.setFileFilter(filter);

      int returnVal = chooser.showSaveDialog(null);
      try {
         if (returnVal == JFileChooser.APPROVE_OPTION) {

            //  ******* note changes below *****
            File file = chooser.getSelectedFile();

            FileOutputStream fos = new FileOutputStream(file, true);
            return new PrintStream(fos);
         } else {
            return null;
         }
      } catch (FileNotFoundException e) {
         JOptionPane.showMessageDialog(null, "Ugyldig Fil!", "error",
               JOptionPane.ERROR_MESSAGE);
      }
      return null;

   }

The crux would be these lines here:

            File file = chooser.getSelectedFile();
            FileOutputStream fos = new FileOutputStream(file, true);
            return new PrintStream(fos);

The true in the FileOutputStream constructor creates a FileOutputStream that appends to the existing file. Please check out the FileOutputStream API for the details on this.

Share:
13,006
Twistar
Author by

Twistar

Updated on June 04, 2022

Comments

  • Twistar
    Twistar almost 2 years

    I cant append text to a text file, it only overwrites the previous text. My code:

    //using JFileChooser to select where to save file
    PrintStream outputStream = MyFrame.ShowSaveDialog();
        if(outputStream!=null){
            outputStream.append(input);
            outputStream.close();
        } 
    

    Edited: The ShowSaveDialog returns a PrintStream. Here is the code for that method:

    public static PrintStream ShowSaveDialog(){
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter(
                "Tekst filer", "txt");
        chooser.setFileFilter(filter);
    
        int returnVal = chooser.showSaveDialog(null);
        try{
            if(returnVal == JFileChooser.APPROVE_OPTION){
    
                return new PrintStream(chooser.getSelectedFile());              
            }
            else{
                return null;
            } 
        }
        catch(FileNotFoundException e){
            JOptionPane.showMessageDialog(null, "Ugyldig Fil!",
                       "error", JOptionPane.ERROR_MESSAGE);
        }
        return null;
    
    }
    
  • Twistar
    Twistar about 12 years
    Thank you very much! I got it working now, and i understood what you did!