Java 无法打开文件名包含冒号的资源
我在笔记本电脑上遇到了一个奇怪的问题 笔记本电脑: OSX 版本:10.11.6-El Capitan Java: java版本“1.8.0_91” Java(TM)SE运行时环境(build 1.8.0_91-b14) Java HotSpot(TM)64位服务器虚拟机(构建25.91-b14,混合模式) 我试图使用Java 无法打开文件名包含冒号的资源,java,classloader,Java,Classloader,我在笔记本电脑上遇到了一个奇怪的问题 笔记本电脑: OSX 版本:10.11.6-El Capitan Java: java版本“1.8.0_91” Java(TM)SE运行时环境(build 1.8.0_91-b14) Java HotSpot(TM)64位服务器虚拟机(构建25.91-b14,混合模式) 我试图使用ClassLoader#getResource打开以下格式的文件名app-2016-08-13T22:55:00Z.1.log.gz 我已经将文件放在/src/main/test/
ClassLoader#getResource
打开以下格式的文件名app-2016-08-13T22:55:00Z.1.log.gz
我已经将文件放在/src/main/test/resources下,但是我总是返回null
如果我将该文件重命名为任何不带冒号的文件,代码将正常工作。
发生什么事了
@Test
public void testColonFile() throws Exception {
String resourceFilename = "app-2016-08-13T22:55:00Z.1.log.gz";
InputStream is = TestClass.class.getClassLoader().getResourceAsStream(resourceFilename);
//InputStream is null here!
}
我的猜测是
toURI
是对冒号进行编码的URL,而文件的构造函数并不期望这样
请添加一行,如
System.err.println(Resources.getResource(resourceFilename).toURI());
查看。我建议删除toURI()
。关于HFS+和冒号有很多讨论。问题是:
被用作文件路径分隔符。因此,您应该避免在文件名中使用:
。因此,系统无法找到指定的文件。请参见:下面是文件系统及其限制的比较。您的代码无效。资源不是文件。它们可以在JAR或WAR文件中,而不是在文件系统中。您应该直接使用URI,或者getResourceAsStream()
。如果我只使用newfile(absolutePath)
它可以正常工作。因此,它可以清楚地找到它。它在toURI
之前失败了<代码>输入流为=BlingPublisherTest.class.getClassLoader().getResourceAsStream(resourceFilename)代码>也为inputstream返回null