5

这是我第一次在 Linux 上遇到 Java 文件访问这样的问题。问题就像标题所说的 -FileNotFoundException当文件实际存在时抛出。此外,具有相同配置(props.txt 文件)的应用程序可以像在 Windows 上一样运行。让我提供一点控制台输出

datasu@dedi2392:~/netcrawler/dkpto$ ls -l
共 20 个
-rwxrw-rw- 1 datasu datasu 114 8 月 7 日 15:53 自动更新
drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data
drwxr-xr-x 2 数据su datasu 4096 8 月 8 日 11:57 日志
-rw-rw-rw- 1 datasu datasu 8 月 32 日 12:44 props.txt
-rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate
datasu@dedi2392:~/netcrawler/dkpto$ ./propsUpdate
父级:/usr/home/datasu/netcrawler/dkpto
   1# -> 道具更新
   2# -> 自动更新
   3# -> 道具.txt
   4# -> 数据
   5# -> 日志
 (没有这样的文件或目录)ava.io.FileNotFoundException:/usr/home/datasu/netcrawler/dkpto/props.txt
        在 java.io.FileInputStream.open(本机方法)
        在 java.io.FileInputStream.(未知来源)
        在 netcrawler.Autoupdater.readProperties(Autoupdater.java:71)
        在 netcrawler.Autoupdater.start(Autoupdater.java:54)
        在 netcrawler.Autoupdater.main(Autoupdater.java:47)
datasu@dedi2392:~/netcrawler/dkpto$ java -version
java版本“1.6.0_45”
Java(TM) SE 运行时环境 (build 1.6.0_45-b06)
Java HotSpot(TM) 64 位服务器 VM(内部版本 20.45-b01,混合模式)
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文件实际存在时却找不到呢?

4

2 回答 2

9

字符串“args”的末尾可能有一个非打印字符,如空格。您可以在使用该变量之前使用 String.trim() 删除此类字符。

于 2013-08-08T11:28:31.417 回答
2

您的主文件夹真的是这条路径吗?

/usr/home/datasu

/home/datasu是它通常在linux上的位置。

另外,尝试将该行更改为:

properties.load(new FileInputStream(new File(args));

如果您调用它,因为./propsUpdate ./props.txt它将在当前工作目录中工作。

于 2013-08-08T11:21:14.330 回答