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