2011-12-31 3 views
0

Как сохранить файл, если он уже открыт без открытия FileChooser dialog как блокнот? Мне потребовалось столько времени, чтобы понять. Я обыскал сеть, но не мог найти что-то, что могло бы помочь мне здесь.Сохранение уже открытого файла в JFileChooser Java?

Спасибо заранее

Мой вопрос заключается в коде ниже. Новое редактирование не сохраняется. Я открыл тот же файл, и ничего не было сохранено (не обновлял я имею в виду)

fileWriter = new BufferedWriter(new 
FileWriter(openFile.getSelectedFile().getPath())); 

private class FileAction implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     //JOptionDialog 
     JFileChooser openFile = new JFileChooser(); 
     openFile.setFileFilter(new txtFilter()); 
     if(e.getSource() == open){ 

      int openOption = openFile.showOpenDialog(frame); 

        textArea.setText(""); //clearing the Text_AREA before opening the new file 

       try{ 
        Scanner scan = new Scanner(new FileReader(openFile.getSelectedFile().getPath())); 
        while(scan.hasNext()) 
         textArea.append(scan.nextLine() + "\n"); 

       }catch(Exception ex){ 
        //ShowDialogBox dialogBox = new ShowDialogBox(); 
        JOptionPane.showMessageDialog(frame,"Please choose .txt File only"); 
       } 
      } 
     } else if(e.getSource() == save){ //SAVE_BUTTON 

      try{ 
       BufferedWriter fileWriter = new BufferedWriter(new FileWriter(openFile.getSelectedFile().getPath())); //(This does not save at all I opened the file again and still as it was before editing) 
       fileWriter.write(textArea.getText()); 
       fileWriter.close(); 
      }catch(Exception ex){ 

      } 


     } 


    } 
} 
+0

Какая у вас ошибка? Вы попытались сохранить дескриптор в открывшемся файле, а затем создать файл-писатель следующим образом: 'new FileWriter (openFile))'? – Thomas

+0

Мне жаль, что это не ошибка, файл не сохраняется. когда я его снова открываю, я не вижу текст, который я добавил перед сохранением. Позвольте мне отредактировать комментарий, чтобы он не путал вас, ребята. –

+0

У вас есть пустой блок catch, и он редко должен быть таким, как вы, а затем слепой. По крайней мере, распечатайте трассировку стека, чтобы убедиться, что вы не пропустили исключение. –

ответ

1

Не зная больше, я полагаю, вы получите NullPointerException, так как при save (это кнопка, верно?), действие создает новый экземпляр JFileChooser, у которого пока нет выбранного файла.

Таким образом, вы должны сохранить выбранный файл при его открытии в переменном экземпляре (использование openFile.getSelectedFile() в open ветви) и передать этот дескриптор файла в FileWriter, который создается в save отрасли.

Если вы повторно используете один и тот же экземпляр FileAction, вы можете поместить здесь ссылку, иначе вы могли бы поместить его в другое место (возможно, какой-то контейнерный объект, который передается действию), к которому имеют доступ несколько экземпляров FileAction.

Достаточно заодно: do resist Искушение использовать статическую переменную, это не соответствующее использование статики.

+0

Я действительно ценю вашу помощь. Моя проблема здесь заключается в том, как передать обработчик, так как он находится внутри блока try и catch. –

+0

@AlexDunham это не имеет ничего общего с блоком try-catch. После открытия файла с помощью выбора файла вы можете получить дескриптор с помощью 'openFile.getSelectedFile()'. Сохраните это так, чтобы вызов действия сохранения имел доступ к этому дескриптору. Как я уже сказал, если вы используете один и тот же экземпляр действия, вы можете использовать переменную экземпляра для простоты. – Thomas

+0

Я использую одно и то же действие, но моя проблема глупа. Файл будет выбран внутри IF-Statment (open branch), поэтому, если я создал переменную экземпляра в начале, 'openFile.getSelectedFile();' ничего не выбрано. Думаю, ты понял. Я не знаю, как получить этот selectedFile из инструкции 'open' branch и передать его в ветку' save'. Я действительно сдаюсь с тех пор, как я пытался сделать это довольно долго. –

1

Не имеет отношения к вашей проблеме, но вы НЕ должны использовать fileWriter.write (...).

Вместо этого вы должны использовать textArea.write(...). См. Text and New Lines для получения дополнительной информации.

+0

счастливый новый год от Старого Континента, кстати +1 – mKorbel

Смежные вопросы