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

cli*_*uke 2 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());

                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

And*_*ter 5

new File("~/")
Run Code Online (Sandbox Code Playgroud)

~是主目录的Shell快捷方式.使用类似的绝对路径

new File("/home/myself/")
Run Code Online (Sandbox Code Playgroud)

正如@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
Run Code Online (Sandbox Code Playgroud)

如文档所述,用户的主目录是特定于系统的,但在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
}
Run Code Online (Sandbox Code Playgroud)