是否在JFileChooser Java中保存已打开的文件?

是否在JFileChooser Java中保存已打开的文件?,java,swing,jfilechooser,Java,Swing,Jfilechooser,如果文件已经打开,如何保存文件,而无需像记事本一样打开FileChooser对话框? 我花了很多时间才弄明白。我在网上搜索了一下,但找不到什么可以帮我的 提前谢谢 我的问题在下面的代码中。不保存新编辑。我打开了同一个文件,但没有保存任何内容(我是说没有更新) 在不了解更多信息的情况下,我假设您得到了一个NullPointerException,因为当按下save(这是一个按钮,对吗?)时,该操作会创建一个新的JFileChooser实例,该实例尚未选择文件 因此,当在实例变量中打开所选文件时,

如果文件已经打开,如何保存文件,而无需像记事本一样打开
FileChooser对话框
? 我花了很多时间才弄明白。我在网上搜索了一下,但找不到什么可以帮我的

提前谢谢

我的问题在下面的代码中。不保存新编辑。我打开了同一个文件,但没有保存任何内容(我是说没有更新)


在不了解更多信息的情况下,我假设您得到了一个
NullPointerException
,因为当按下
save
(这是一个按钮,对吗?)时,该操作会创建一个新的
JFileChooser
实例,该实例尚未选择文件

因此,当在实例变量中打开所选文件时,应将其存储(在
打开
分支中使用
openFile.getSelectedFile()
),并将该文件句柄传递给在
保存
分支中创建的
FileWriter

如果您正在重用
FileAction
的同一个实例,则可以将引用放在那里,否则可以将其放在其他地方(可能是传递给该操作的某个容器对象),在那里,
FileAction
的多个实例可以访问该引用


提前一句话:请抵制使用静态变量的诱惑,这不是静态的适当用法。

与您的问题无关,但您不应该使用fileWriter.write(…)


相反,您应该使用
textArea.write(…)
。有关更多信息,请参阅。

您会遇到什么错误?您是否尝试将句柄保存到打开的文件,然后像这样创建文件编写器:
newfilewriter(openedFile))
?很抱歉,这不是错误,文件未保存。当我再次打开它时,我看不到保存前添加的文本。让我编辑一下评论,这样就不会让你们感到困惑了。你们有一个空的捕手挡块,而且应该很少有这样的情况,因为你们是瞎飞的。至少打印出堆栈跟踪,以确保没有遗漏异常。@Thomas我尝试过这样做,结果显示
找不到变量openedFile
@HovercraftFullOfEels是,我想他得到了一个NPE,因为
openFile
是一个新创建的
JFileChooser
并且还没有被选中。我非常感谢你的帮助。我这里的问题是如何传递处理程序,因为它位于try-and-catch块内。@AlexDunham这与try-catch块无关。使用文件选择器打开文件后,可以使用
openFile.getSelectedFile()
获取句柄。以保存操作的调用可以访问该句柄的方式存储该句柄。正如我所说,如果你使用的是同一个动作实例,为了简单起见,你可以使用一个实例变量。我使用的是同一个动作,但我的问题很愚蠢。该文件将在IF语句(open分支)中被选择,因此如果我在开头创建了的实例变量“openFile.getSelectedFile();”未选择任何内容。我想你明白了。我不知道如何从
open
branch语句中获取所选文件并将其传递给
save
分支。我真的放弃了,因为我已经尝试了很长时间了。@AlexDunham你必须在
int openOption=openFile.showOpenDialog(frame)之后调用
getSelectedFile()
openOption
的值)。然后将其写入操作中的实例变量。查看
JFileChooser
的文档了解更多信息。我已经按照你说的做了。但我仍然不知道如何在action中的实例变量中编写它。不管怎样,谢谢。来自旧大陆的新年快乐,顺便说一句+1
 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){

            }


        }


    }
}