我正在尝试读取文件,我得到的错误是
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
答案 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());
您目前的目录是什么?