我正在使用:
我很好奇为什么这条路不起作用:
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)
...
答案 0 :(得分:2)
在Win 7上使用文件分隔符是&#39; \&#39;并且它在doc中指出 getResourceAsStream
在委托之前,使用此算法从给定的资源名称构造绝对资源名称:
如果名称以&#39; /&#39;开头。 (&#39; \ u002f&#39;),然后资源的绝对名称是&#39; /&#39;后面的名称部分。 否则,绝对名称具有以下形式: modified_package_name /名称 其中modified_package_name是此对象的包名称,其中包含&#39; /&#39;取代&#39;。&#39; (&#39; \ u002e&#39)。
答案 1 :(得分:2)
访问内部资源时,就像使用getResouceAsStream
一样,文件分隔符必须为/
。
我相信您使用的是Windows计算机,因此文件分隔符为\
。
答案 2 :(得分:1)
/
期望资源名称作为参数,而不是文件路径。
资源名称由正斜杠\
分隔,无论文件系统如何(资源名称/路径表示类路径上的路径,而不是文件系统上的路径)。
因此,您无法使用文件系统分隔符来构建资源名称。在Windows上,它将是反斜杠Dict.merge/2