簡體   English   中英

路徑不起作用; 使用File.separator

[英]Path not working; using File.separator

我正在使用:

  • 傑克1.8.0.71
  • IntelliJ 2016.3.2
  • Win7的

我很好奇為什么這條路不起作用:

public static final String ZPL_TEMPLATE =
                    File.separator
                    + "templates"
                    + File.separator
                    + "Template.txt";

但是這個很好用:

public static final String TEMPLATE = "/templates/Template.txt";

這是使用位置(在另一個軟件包中):

InputStream is = this.getClass().getResourceAsStream(TEMPLATE);

編輯:例外:

...
java.lang.NullPointerException: null
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    ...

Becaseuse在Win 7上的文件分隔符為'\\',如文檔中針對getResourceAsStream所述

在委派之前,使用以下算法從給定資源名稱構造絕對資源名稱:

如果名稱以'/'('\\ u002f')開頭,則資源的絕對名稱是名稱中'/'之后的部分。 否則,絕對名稱的格式如下:modified_pa​​ckage_name / name,其中Modifyed_pa​​ckage_name是此對象的程序包名稱,用“ /”代替“。”。 ('\\ u002e')。

當訪問內部資源時,就像使用getResouceAsStream ,文件分隔符必須為/

我相信您在Windows計算機中,因此文件分隔符為\\

有關更多信息,請參見加載資源時如何使用文件分隔符

getResourceAsStream期望將資源名稱作為參數,而不是文件路徑。

無論文件系統如何,java中的資源名稱都用正斜杠/分隔(資源名稱/路徑表示類路徑上的路徑,而不是文件系統上的路徑)。

因此,您不能使用文件系統分隔符來構建資源名稱。 在Windows上,它將是反斜杠\\

暫無
暫無

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

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