如果在File.separator
的搜索路径的字符串中使用getResourceAsStream(String name)
,有人可以解释为什么Java找不到资源吗?我有这段代码:
private final String RESOURCE_PATH = File.separator + "dir" + File.separator;
private final String SAME_PATH_HARDCODED = "/dir/";
public void findResource(String fileName) {
InputStream file1 = ThisClass.class
.getResourceAsStream(RESOURCE_PATH + fileName); // returns null
InputStream file2 = ThisClass.class
.getResourceAsStream(SAME_PATH_HARDCODED + fileName); // returns file
}
我发现,File.separator
使用了反斜杠而不是斜杠。但我希望File.separator更灵活。在这种情况下,它不是。我想知道,为什么。非常感谢。
答案 0 :(得分:0)
因为当你将\\
分隔符传递给getResourceAsStream()
方法时,它会以另一种方式解释你的目录的路径,实际上在dir之前添加了包名。
在委托之前,从中构造绝对资源名称 使用此算法给定资源名称:
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').
您的File.separator
会为unix和Windows计算机返回不同的结果。如果在这种情况下使用mack或unix,则代码将起作用,但在win机器中失败。
public static final char separatorChar
系统相关的默认名称分隔符。这个领域是 初始化为包含系统值的第一个字符 property file.separator。在UNIX系统上,此字段的值为 '/';在Microsoft Windows系统上它是'\'。