如何在Java中保存所选文件以供下次使用该程序

如何在Java中保存所选文件以供下次使用该程序,java,swing,file,serialization,jfilechooser,Java,Swing,File,Serialization,Jfilechooser,我试图保存最后选择的文件(由用户使用JFilechooser)以便下次程序运行时自动打开该文件 public void actionPerformed(ActionEvent evt) { JFileChooser fileopen = new JFileChooser(); FileFilter filter = new FileNameExtensionFilter("xml files", "xml"); fileopen.a

我试图保存最后选择的文件(由用户使用
JFilechooser
)以便下次程序运行时自动打开该文件

public void actionPerformed(ActionEvent evt) {
    JFileChooser fileopen = new JFileChooser();
    FileFilter filter = new FileNameExtensionFilter("xml files", "xml");
    fileopen.addChoosableFileFilter(filter);
    
    int ret = fileopen.showDialog(null, "Open file");
    if (ret == JFileChooser.APPROVE_OPTION) {
        File file = fileopen.getSelectedFile();
        xmlSetUp(file);
        //add save file for next use
    }
}

只有被接受的答案提到了Java首选项API,但它不包含任何示例代码。下面的代码显示一个
JFrame
,其中包含一个
JTextField
,该字段显示所选文件的路径以及一个
JButton
。当您激活
JButton
时,它会显示一个
JFileChooser
。选择文件后,该选择将保存为[java]首选项。下次运行同一应用程序时,
JTextField
将首先显示保存在首选项中的路径

导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.io.File;
导入java.util.prefs.Preferences;
导入javax.swing.JButton;
导入javax.swing.JFileChooser;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
公共类实现ActionListener,Runnable{
私有静态最终字符串CHOOSE=“CHOOSE”;
私有静态最终字符串LAST\u FILE\u selected=“LAST\u FILE\u selected”;
私有JFrame;
私有JTextField textField;
私有字符串保存文件;
@凌驾
已执行的公共无效操作(操作事件){
字符串actionCommand=event.getActionCommand();
开关(动作命令){
案例选择:
选择文件();
打破
违约:
JOptionPane.showMessageDialog(框架,
行动司令部,
“未处理”,
JOptionPane。警告消息);
}
}
@凌驾
公开募捐{
showGui();
}
私有JButton createButton(字符串文本、int助记符、字符串工具提示){
JButton按钮=新JButton(文本);
按钮。设置助记符(助记符);
addActionListener(这个);
返回按钮;
}
私有JPanel CreateButtonPanel(){
JPanel buttonPanel=新的JPanel();
添加(createButton(CHOOSE,KeyEvent.VK_C,“选择文件”);
返回按钮面板;
}
私有JPanel createTopPanel(){
JPanel-topPanel=新的JPanel();
JLabel标签=新的JLabel(“选定文件”);
topPanel.添加(标签);
textField=新的JTextField(20);
Preferences prefs=Preferences.userNodeForPackage(getClass());
savedFile=prefs.get(最后选择的文件为“”);
textField.setText(savedFile);
topPanel.add(文本字段);
返回托帕内尔;
}
私有void selectFile(){
JFileChooser fileChooser=新的JFileChooser();
fileChooser.setFileSelectionMode(仅限JFileChooser.FILES_);
文件初始值=新文件(savedFile);
if(initial.exists()){
fileChooser.setCurrentDirectory(initial.getParentFile());
}
if(fileChooser.showOpenDialog(frame)=JFileChooser.APPROVE\u选项){
文件f=fileChooser.getSelectedFile();
字符串路径=f.getAbsolutePath();
textField.setText(路径);
如果(!savedFile.equals(路径)){
Preferences prefs=Preferences.userNodeForPackage(getClass());
prefs.put(最后选择的文件,路径);
}
}
}
私有void showGui(){
frame=新的JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createTopPanel(),BorderLayout.PAGE_START);
frame.add(createButtonsPanel(),BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
invokeLater(新的memory());
}
}

只有被接受的答案提到了Java首选项API,但它不包含任何示例代码。下面的代码显示一个
JFrame
,其中包含一个
JTextField
,该字段显示所选文件的路径以及一个
JButton
。当您激活
JButton
时,它会显示一个
JFileChooser
。选择文件后,该选择将保存为[java]首选项。下次运行同一应用程序时,
JTextField
将首先显示保存在首选项中的路径

导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.io.File;
导入java.util.prefs.Preferences;
导入javax.swing.JButton;
导入javax.swing.JFileChooser;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
公共类实现ActionListener,Runnable{
私有静态最终字符串CHOOSE=“CHOOSE”;
私有静态最终字符串LAST\u FILE\u selected=“LAST\u FILE\u selected”;
私有JFrame;
私有JTextField textField;
私有字符串保存文件;
@凌驾
已执行的公共无效操作(操作事件){
字符串actionCommand=event.getActionCommand();
开关(动作命令){
案例选择:
选择文件();
打破
违约:
JOptionPane.showMessageDialog(框架,
行动司令部,
“未处理”,
JOptionPane。警告消息);
}
}
@凌驾
公开募捐{