如何使用JFileChooser加载文件?

3
在Java中,我想使用JFileChooser以其自身格式加载文件[无论格式如何]。这意味着我不想读取并显示我的JFrame中的内容。相反,我希望它们像在Windows照片查看器/Irfan Viewer中打开/加载图像和在Adobe Reader中打开PDF一样通过单击按钮打开/加载。
我已经搜索了很多。但是我阅读的所有教程都告诉我如何通过单击JButton打印“打开此文件/您选择了此文件”的行。实际上没有人在单击按钮时打开/加载文件。也许我没有正确理解他们所说的,因为我是Java的新手。我希望我的问题很清楚,请帮忙...
以下是我从教程页面获得的代码:
 public class JFileChooserTest {

    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("JComboBox Test");
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton button = new JButton("Select File");
        button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
            JFileChooser fileChooser = new JFileChooser();
            int returnValue = fileChooser.showOpenDialog(null);
            if (returnValue == JFileChooser.APPROVE_OPTION) {
              File selectedFile = fileChooser.getSelectedFile();
              System.out.println(selectedFile.getName());
            }
          }
        });
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }    
}

我想用Java实现以下功能,以下是在Windows中的一个示例:

点击“Browse”按钮会打开下面这个窗口

当我选择一个XLS文件并点击“OPEN”按钮时,该XLS文件将被打开。我希望用Java实现完全相同的功能。希望现在更清楚了。


你想要什么?你想查看文件内容吗? - Adem
不,我想通过单击按钮加载/导入所选的文件。就像我们在Windows文件打开资源管理器中打开文件一样。 - Sam
1
你能解释一下“load/import”的意思吗? - Adem
2个回答

6

您可以尝试使用Desktop.open()

Desktop.getDesktop().open(selectedFile);

编辑 你需要在这里更新:

button.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent ae) {
      JFileChooser fileChooser = new JFileChooser();
      int returnValue = fileChooser.showOpenDialog(null);
      if (returnValue == JFileChooser.APPROVE_OPTION) {
        File selectedFile = fileChooser.getSelectedFile();
        java.awt.Desktop.getDesktop().open(selectedFile);//<-- here
      }
   }
});

以下是来自该网站的示例代码:


我认为这是迄今为止最好的答案。一旦建立,使用它实际上就是一个“一行代码”。顺便说一句 - 尝试 desktop.open(new File(System.getProperty("user.home"));。这是一个很好的演示,因为它应该在任何机器上都可以运行。 - Andrew Thompson
@Sam,有什么问题吗?是的,它应该在用户电脑上使用默认编辑器打开指定的文件,例如在Windows中使用记事本打开.txt文件。 - user2575725
这段代码将打开我们在其中提到的文本/PDF文件。[File file = new File("/Users/pankaj/source.txt");]。但是,我如何浏览和选择文件并单击“打开” - 我希望文件在哪里打开。例如,在记事本中打开文本文档,在Windows照片查看器中打开图像等。 - Sam
哦!!!非常感谢。我很感激你的努力。我已经搜索了三天了,对于新手来说,这是一个简单易懂的答案。谢谢... - Sam
请问打印文件名的目的是什么呢?System.out.println(selectedFile.getName()); - Sam

1

如果我理解正确,您希望选择一个文件并将其传递给系统的默认应用程序。不幸的是,这高度依赖于您的操作系统。对于Windows,您可以像这样将其传递到命令行:

        String systemcall = "cmd /C start \"\" \"" + absolutePath + "\"";
        Runtime runTime = Runtime.getRuntime();
        HomeLogger.instance().info("EXECUTE " + systemcall);
        runTime.exec(systemcall);

字符串的绝对路径必须是文件的确切位置,例如"C:\test.txt"。希望这有所帮助!

谢谢,我会尝试这个,但是对我来说需要先学习一下。 - Sam
参见当Runtime.exec()无法正常工作时,了解正确创建和处理进程的许多好建议。然后忽略它引用的exec,使用ProcessBuilder来创建进程。但是,对于一个更好且更可靠的答案,请参见此答案 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接