Сохранение уже открытого файла в JFileChooser Java? - PullRequest
0 голосов
/ 01 января 2012

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

Заранее спасибо

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

 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){

            }


        }


    }
}

Ответы [ 2 ]

1 голос
/ 01 января 2012

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

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

1 голос
/ 01 января 2012

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

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

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

Просто слово заранее: сопротивляйся соблазн использовать статическую переменную, это неуместное использование статики.

...