2013-02-01 57 views
2

我在写一个读取csv文件并将内容显示到JList的小应用程序。尝试读取文件时获取java.io.FileNotFoundException

我目前的问题是,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

异常的确切消息是什么? 'System.out.println(e.getMessage());'这应该给出一个很好的暗示问题是什么。它可能是“权限被拒绝”,或者“系统找不到指定的文件”或其他内容。这可能会提供有趣的信息,而不是人们对问题的可能性进行猜测。 –

回答

5
new File("~/") 

~是一个外壳程序快捷方式的主目录。使用绝对路径一样

new File("/home/myself/") 

正如@pickypg指出,JFileChooser.setCurrentDirectory()如果传递的目录无效设置用户的主目录为默认值。所以,尽管File()不解释~作为壳牌确,该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()返回一条合适的路径,使​​不应该抛出一个FileNotFoundException


基于注释,事实证明,问题不是运行时异常,而是一个编译时错误,其中的异常没有捕获。添加try{}catch{}块周围的​​构造:

try { 
    CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath())); 
}catch(FileNotFoundException fnfe) { 
    // handle exception, e.g. show error message 
} 
+0

加上默认目录应该是用户的主目录。 – pickypg

+0

我没有使用〜/的任何问题,但谢谢指出。 – ChaoticLoki

+0

有趣的是,它似乎工作 - 在Java 7的Windows 7中,它指引我到“我的文档”文件夹。让我们检查文档... –

1

如果问题实际上是在该行,而不是在那里安德烈亚斯指出,然后直接与file构建FileReader,而不是给它的路径:

new FileReader(file) 
+0

我删除了'.getAbsoluteValue()',但它仍在抛出该例外 – ChaoticLoki

+1

在尝试实例化FileReader之前,尝试调试/打印并检查'file.getAbsolutePath()'的值。问题的根源可能在那里。 – pickypg

+0

我已经这样做了,它绝对会返回绝对路径。 – ChaoticLoki