路径不工作;使用 File.separator

Path not working; using File.separator

我正在使用:

我很好奇为什么这条路径不起作用:

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 上,它将是一个反斜杠 \