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

时间:2010-02-22 17:55:24

标签: java exception 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.<init>(FileInputStream.java:106)
        at game.player.gametheoryagent.GameTheoryAgent.<init>(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

4 个答案:

答案 0 :(得分:21)

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

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

这表明文件名可能有尾随空格。你可以通过以下方式仔细检查你的pathToConfiguration变量:

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

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

答案 1 :(得分:0)

当你执行你的java程序时,你是否像运行命令行检查时那样运行它?

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

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

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

答案 2 :(得分:0)

我想您多次检查路径名,并且正如您所说,您正在代码所在的同一台计算机上运行该应用程序。

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

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

答案 3 :(得分:0)

如果你这样写,会输出什么:

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

您目前的目录是什么?