路径不工作;使用File.separator

时间:2017-01-16 12:59:18

标签: java path separator

我正在使用:

  • jdk 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)
    ...

3 个答案:

答案 0 :(得分:2)

在Win 7上使用文件分隔符是&#39; \&#39;并且它在doc中指出 getResourceAsStream

  

在委托之前,使用此算法从给定的资源名称构造绝对资源名称:

     

如果名称以&#39; /&#39;开头。 (&#39; \ u002f&#39;),然后资源的绝对名称是&#39; /&#39;后面的名称部分。   否则,绝对名称具有以下形式:   modified_pa​​ckage_name /名称   其中modified_pa​​ckage_name是此对象的包名称,其中包含&#39; /&#39;取代&#39;。&#39; (&#39; \ u002e&#39)。

答案 1 :(得分:2)

访问内部资源时,就像使用getResouceAsStream一样,文件分隔符必须为/

我相信您使用的是Windows计算机,因此文件分隔符为\

有关详细信息,请参阅How to use file separator when loading resources

答案 2 :(得分:1)

/期望资源名称作为参数,而不是文件路径。

java中的

资源名称由正斜杠\分隔,无论文件系统如何(资源名称/路径表示类路径上的路径,而不是文件系统上的路径)。

因此,您无法使用文件系统分隔符来构建资源名称。在Windows上,它将是反斜杠Dict.merge/2