为什么在Linux上存在FileNotFoundException?

这是我第一次在linux上遇到Java的文件访问问题。 问题就像标题所示 – 当文件实际存在时抛出FileNotFoundException 。 而且,具有相同configuration(props.txt文件)的应用程序在Windows上应该可以运行。 让我提供一些控制台输出

 datasu @ dedi2392:〜/ netcrawler / dkpto $ ls -l
共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 8月8日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# - > autoupdate
    3# - > props.txt
    4# - >数据
    5# - >日志
  (没有这样的文件或目录)ava.io.FileNotFoundException:/usr/home/datasu/netcrawler/dkpto/props.txt
        在java.io.FileInputStream.open(Native Method)
        在java.io.FileInputStream。(Unknown Source)
        在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运行时环境(版本1.6.0_45-b06)
 Java HotSpot(TM)64位服务器虚拟机(构build20.45-b01,混合模式)
 datasu @ dedi2392:〜/ netcrawler / DKPTO $

这里是负责生成该输出的Java代码(至less在调用./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文件实际上没有find?

字符串“args”最后可能有一个非打印字符,就像一个空格。 在使用该变量之前,可以使用String.trim()来删除这些字符。

你的主文件夹真的是这个路径吗?

 /usr/home/datasu 

/home/datasu是通常在linux上的地方。

另外,尝试改变这一行:

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

如果您将其称为./propsUpdate ./props.txt ,它将从当前工作目录中运行。