10

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

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

4 回答 4

21

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

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

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

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

仔细检查路径是否与您认为的一样?

于 2010-02-22T18:53:05.253 回答
0

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

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

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

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

于 2010-02-22T18:18:08.863 回答
0

I suppose you double checked the pathname more than once, and as you say you are running the app on the same machine where the code resides.

Could it be that there are some obscure NFS/file server mounts that are valid only for the login shell but not for the applications?

Try copying the file in your $HOME and see if it works.

于 2010-02-22T18:25:01.440 回答
0

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

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

你的当前目录是什么?

于 2010-02-22T18:37:08.780 回答