尝试读取文件时获取java.io.FileNotFoundException

时间:2013-02-01 08:26:37

标签: java swing jfilechooser filenotfoundexception opencsv

我正在编写一个小应用程序,它读取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());

                }
            }
        });

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

如果问题实际上在那一行,而不是安德烈亚斯指出的地方,那么直接用FileReader构建file而不是给它路径:

new FileReader(file)