路径不工作;使用 File.separator
Path not working; using File.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)
...
因为在 Win 7 上使用的文件分隔符是“\”,正如它在 getResourceAsStream
的文档中所述
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
访问内部资源时,就像您对 getResouceAsStream
所做的那样,文件分隔符必须是 /
.
我相信你在 Windows 机器上,所以文件分隔符是 \
.
有关详细信息,请参阅 How to use file separator when loading resources。
getResourceAsStream
需要资源名称作为参数,而不是文件路径。
java中的资源名称由正斜杠分隔/
,无论文件系统如何(资源names/path表示路径类路径,不在文件系统上)。
因此,您不能使用文件系统分隔符来构建资源名称。在 windows 上,它将是一个反斜杠 \
我正在使用:
- 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)
...
因为在 Win 7 上使用的文件分隔符是“\”,正如它在 getResourceAsStream
的文档中所述Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'. Otherwise, the absolute name is of the following form: modified_package_name/name Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
访问内部资源时,就像您对 getResouceAsStream
所做的那样,文件分隔符必须是 /
.
我相信你在 Windows 机器上,所以文件分隔符是 \
.
有关详细信息,请参阅 How to use file separator when loading resources。
getResourceAsStream
需要资源名称作为参数,而不是文件路径。
java中的资源名称由正斜杠分隔/
,无论文件系统如何(资源names/path表示路径类路径,不在文件系统上)。
因此,您不能使用文件系统分隔符来构建资源名称。在 windows 上,它将是一个反斜杠 \