2

我正在编写一个小应用程序,它读取 csv 文件并将内容显示到 JList 中。

我目前的问题是new FileReader(file)代码一直给我一个java.io.FileNotFoundException错误,我不太清楚为什么。

loadFile.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent actionEvent)
            {
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.setCurrentDirectory(new File("~/"));

                if (fileChooser.showOpenDialog(instance) == JFileChooser.APPROVE_OPTION)
                {
                    File file = fileChooser.getSelectedFile();
                    CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
                    fileLocation.setText(file.getAbsolutePath());

                }
            }
        });
4

2 回答 2

5
new File("~/")

~是主目录的 Shell 快捷方式。使用绝对路径,例如

new File("/home/myself/")

正如@pickypg 所指出的,如果传递的目录无效,则JFileChooser.setCurrentDirectory()将用户的主目录设置为默认目录。因此,即使File()不解释~为 Shell ,也会JFileChooser从用户的主目录开始 - 但对于任何不存在的目录都是如此,例如

new File("/Windows")   // JFileChooser would start in "\Windows"
new File("/xWindows")   // JFileChooser would start in the user's home directory

正如文档所述,用户的主目录是系统特定的,但在 MS Windows 上,它通常是“我的文档”文件夹。

但是,即使使用“~/”这样的不存在路径,也会JFileChooser.getSelectedFile()返回正确的路径,因此FileReader()不应抛出FileNotFoundException.


根据评论,事实证明问题不是运行时异常,而是未捕获异常的编译时错误。在构造函数周围添加一个try{}catch{}FileReader()

try {
    CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
}catch(FileNotFoundException fnfe) {
    // handle exception, e.g. show error message
}
于 2013-02-01T08:29:49.807 回答
1

如果问题实际上出在那条线上,而不是 Andreas 指出的地方,那么FileReader直接用 the构造file而不是给它路径:

new FileReader(file)
于 2013-02-01T08:30:51.280 回答