java中路径名的反斜杠

时间:2011-07-26 16:42:33

标签: java ant path apache-commons

因此,我正在尝试编写一个常规Java应用程序,该应用程序从编译时由ANT更新的文件中读取当前版本。当使用OpenJDK或SunJDK在我的开发机器(Ubuntu 11.04上的Eclipse 3.5.2)上运行时,它会抛出FileNotFoundException。添加或删除前导反斜杠似乎没有任何效果。

关于如何解决这个问题的任何想法?我认为错误在于这一行:

in = new FileInputStream("data/build_info.properties");

代码 - 更新

转换为Java属性

String revision = "";

Properties defaultProps = new Properties();
FileInputStream in;
try {
    in = new FileInputStream("data/build_info.properties");
    defaultProps.load(in);
    in.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

revision = "Version: " + defaultProps.getProperty("build.major.number") + "." +
defaultProps.getProperty("build.minor.number") + "    " +
"Revision: " + defaultProps.getProperty("build.revision.number");

ANT Jar脚本

<target name="jar">
    <antcall target="clean" />
    <antcall target="compile" />

    <jar destfile="${dir.dist}/${name.jar}" basedir="." includes="${dir.lib}/*" filesetmanifest="mergewithoutmain">
        <manifest>
            <attribute name="Main-Class" value="emp.main.EmpowerView" />
        </manifest>
        <fileset dir="${dir.build}" includes="**/*" excludes="META-INF/*.SF" />
        <fileset dir="." includes="${dir.media}/*" />
        <fileset dir="." includes="${dir.data}/*" />
    </jar>
    <chmod file="${dir.dist}/${name.jar}" perm="+x" />

</target>

3 个答案:

答案 0 :(得分:1)

您可以使用调试器吗?我注意到你有一些System.out.println - 是否在取消注释时打印?

无论如何,我没有看到修订版如何为null - 由于IOException,它可能是一个空字符串,但不是null。

答案 1 :(得分:1)

如果您尝试在Jar中加载文件,则需要使用java.lang.Class.getResourceAsStream()加载文件。您无法使用java.util.File指向Jar中的文件。有关如何使用它的示例,请参阅以下答案:

https://stackoverflow.com/questions/4548791

答案 2 :(得分:0)

这里发生的事情如下,对newfile()FileUtils.readLines()的调用抛出IOException。
这是抓住了:

} catch (IOException e) {
    revision = "" + e.getCause();
}

并且正在设置revision =以空字符串为前缀的e.getCause()的值。

e.getCause()正在返回 null 文字,这让我相信FileUtils.readLines()会抛出异常。
通过将revision = "" + e.getCause();更改为revision = "XXX->" + e.getCause();来对此进行测试,之后我预计您会在调用后发现修订版的值为=“XXX-&gt; null”。

由于无法找到文件data/build_info.properties,因此抛出了原因为null =的IOException。

因此,您需要在运行此代码时检查当前工作目录的值,并确保可以相对于该路径解析data/build_info.properties