Добавить в текстовый файл с помощью PrintStream - PullRequest
2 голосов
/ 21 марта 2012

Я не могу добавить текст в текстовый файл, он только перезаписывает предыдущий текст. Мой код:

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

Отредактировано: ShowSaveDialog возвращает PrintStream. Вот код для этого метода:

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;

}

1 Ответ

8 голосов
/ 21 марта 2012

Что возвращает MyFrame.ShowSaveDialog();? Ключ должен создать FileOutputStream с соответствующим конструктором (второй параметр должен быть логическим true), который сделает его присоединяющимся FileOutputStream, а затем сконструировать ваш PrintStream, используя этот объект FileOutputStream.

Например, если showSaveDialog () (обратите внимание, что имена методов и переменных должны начинаться с строчных букв) возвращает имя файла или объекта File, вы можете сделать что-то вроде этого:

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:
Чтобы применить это к указанному выше коду, сделайте что-то вроде этого:

   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;

   }

Суть здесь будет в следующих строках:

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

Значение true в конструкторе FileOutputStream создает FileOutputStream, который добавляется к существующему файлу. Пожалуйста, проверьте API FileOutputStream для деталей об этом.

...