文件存在时具有所有权限的FileNotFoundException

我正在尝试读取文件,我得到的错误是

java.io.FileNotFoundException: /homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations/gameTheoryAgentConfiguration.properties (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:106) at game.player.gametheoryagent.GameTheoryAgent.(GameTheoryAgent.java:67) at simulation.Simulator.createPlayer(Simulator.java:141) at simulation.Simulator.main(Simulator.java:64) 

但是文件确实存在,只是为了仔细检查我给它777权限,如下所示:

 tui% cd /homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations tui% ls -al total 4 drwxrwxrwx 3 at1106 cs4 1024 2010-02-22 17:45 . drwxrwxrwx 4 at1106 cs4 1024 2010-02-22 17:27 .. -rwxrwxrwx 1 at1106 cs4 260 2010-02-22 17:31 gameTheoryAgentConfiguration.properties drwxrwxrwx 6 at1106 cs4 1024 2010-02-22 17:41 .svn 

关于为什么我得到FNF例外的任何想法?

谢谢

调用的java代码:

 File file = new File(pathToConfiguration) Properties configuration = new Properties(); try{ configuration.load(new FileInputStream(file)); int RAISE_RATIO = Integer.parseInt(configuration.getProperty("raise_ratio")); } catch(IOException event){ System.err.println("Error in reading configuration file " + pathToConfiguration); event.printStackTrace(); } 

属性文件如下:

 raise_ratio=4 

这是在windows中测试的(使用diff pathToConfiguration(传递给构造函数))并且工作正常。

在Catch块中的以下检查中添加

  if(file.exists()){ System.out.println("file exists"); } else{ System.out.println("file doesn't exist"); } System.out.println(file.getAbsolutePath()); if(file.canRead()){ System.out.println("can read"); } if(file.canWrite()){ System.out.println("can write"); } 

输出如下:

 file doesn't exist /homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations/gameTheoryAgentConfiguration.properties 

根据初始堆栈跟踪,文件名和原因之间似乎有两个空格:

 FileNotFoundException: ...Configuration.properties (No such file or directory) --------------------------------------------------^^ 

这将向我指示文件名可能具有尾随空格。 你能通过以下方式仔细检查你的pathToConfiguration变量:

 System.out.println("[" + pathToConfiguration + "]"); 

要仔细检查路径是否符合您的想法?

我想你不止一次检查了路径名,正如你所说,你在代码所在的同一台机器上运行应用程序。

是否有一些模糊的NFS /文件服务器挂载仅对登录shell有效,但对应用程序无效?

尝试复制$ HOME中的文件,看看它是否有效。

如果你写这个是什么输出:

System.out.println(new File(".").getAbsolutePath());

你目前的目录是什么?

当你执行你的java程序时,你是否运行它与运行命令行检查时的“用户”相同?

编辑 :尝试将文件复制到您运行程序的目录,并查看它是否能够读取它。 将文件复制到执行目录后,您还可以尝试以下操作:

 InputStream in = getClass().getResourceAsStream("/gameTheoryAgentConfiguration.properties"); configuration.load(in); 

(假设你的类路径中有“。”)