java中路径名的前导反斜杠



所以,我试图编写一个常规的Java应用程序,它从编译时由ANT更新的文件中读取当前版本。当在我的开发机器(Ubuntu 11.04上的Eclipse 3.5.2)上运行OpenJDK或SunJDK时,它会抛出一个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 Script

<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>

如果您试图在Jar中加载文件,那么您需要使用java.lang.Class.getResourceAsStream()来加载该文件。您不能指向包含java.util.File的Jar中的文件。有关如何使用它的示例,请参阅以下答案:

https://stackoverflow.com/questions/4548791

您能逐步完成调试器吗?我注意到你有一些systemout。Println的——它们在没有注释的情况下被打印吗?

无论如何,我不知道revision是null的——它可能是一个空字符串,由于IOException,但不是null。

这里发生的事情如下,调用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();来测试这一点,之后我希望您会发现调用后的revision值为= "XXX->null"。

由于无法定位文件data/build_info.properties,抛出了cause=null的IOException。

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

相关内容

  • 没有找到相关文章

最新更新