这是我第一次在Linux上使用Java访问文件时遇到的问题。问题就像标题所说 - 当文件实际存在时,会抛出FileNotFoundException异常。此外,具有相同配置(props.txt文件)的应用程序在Windows上运行得很好。
让我提供一点控制台输出
所以为什么实际上
datasu@dedi2392:~/netcrawler/dkpto$ ls -l total 20 -rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log -rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt -rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate datasu@dedi2392:~/netcrawler/dkpto$ ./propsUpdate Parent: /usr/home/datasu/netcrawler/dkpto 1# -> propsUpdate 2# -> autoupdate 3# -> props.txt 4# -> data 5# -> log (No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(Unknown Source) at netcrawler.Autoupdater.readProperties(Autoupdater.java:71) at netcrawler.Autoupdater.start(Autoupdater.java:54) at netcrawler.Autoupdater.main(Autoupdater.java:47) datasu@dedi2392:~/netcrawler/dkpto$ java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) datasu@dedi2392:~/netcrawler/dkpto$这是负责生成该输出的Java代码(至少在调用./propsUpdate后)
private void readProperties(String args) throws FileNotFoundException, IOException {
System.out.println("Parent: " + new File(args).getAbsoluteFile().getParentFile().getAbsolutePath());
CommonTools.PrintArray(new File(args).getAbsoluteFile().getParentFile().list());
properties.load(new FileInputStream(new File(args).getAbsoluteFile())); // this line throws the exception
stageNumber = Integer.parseInt(properties.getProperty(PROP_STAGE_NUMBER_KEY, "0"));
}
所以为什么实际上
props.txt
文件已经存在,但是却找不到它呢?
/usr/home/datasu/
吗?我不知道你的Linux/Unix版本,但通常它不是在/home/...
某个地方吗?特别是因为你在第一行显示了~/
,这指的是主目录。 - DrColossosreadProperties
的args
的确切语法是什么? - hax0r_n_codeFileInputStream
与new File
分开。 像这样:File file = new File(args)
file = file.getAbsoluteFile()
FileInputStream fis = new FileInputStream(file)
这样我们可以获得更多信息。 - Levente Kurusa