簡體   English   中英

java中路徑名的反斜杠

[英]Leading backslash in path names in java

因此,我正在嘗試編寫一個常規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>

你可以通過調試器一步一步嗎? 我注意到你有一些System.out.println - 是否在取消注釋時打印?

無論如何,我沒有看到修訂版如何為null - 由於IOException,它可能是一個空字符串,但不是null。

如果您嘗試在Jar內部加載文件,則需要使用java.lang.Class.getResourceAsStream()來加載文件。 您不能使用java.util.File指向Jar java.util.File 有關如何使用它的示例,請參閱以下答案:

https://stackoverflow.com/questions/4548791

這里發生的事情如下,對newfile()FileUtils.readLines()的調用拋出IOException。
這被抓住了:

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

並設置revision =以空字符串為前綴的e.getCause()的值。

e.getCause()的返回文本 ,這使我相信,異常正被拋出FileUtils.readLines()
通過更改revision = "" + e.getCause(); to revision = "XXX->" + e.getCause(); ,之后我希望你會發現調用后修訂的值是=“XXX-> null”。

拋出帶有cause = null的IOException,因為無法找到文件data/build_info.properties

因此,在運行此代碼時需要檢查當前工作目錄的值,並確保可以相對於該路徑解析data/build_info.properties

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM