【发布时间】:2017-08-20 13:11:47
【问题描述】:
从资源文件夹中加载文本文件等资产时,最常用的方法是使用ClassLoader获取路径:
String path = getClass().getClassLoader().getResource("file.txt").getPath();
然后,您可以使用 java 必须读取该文件内容的众多读取器中的任何一个。但是由于某种原因,Paths.get(path) 对路径不满意:
byte[] content = Files.readAllBytes(Paths.get(path))
-> throws java.nio.file.InvalidPathException when executed
ClassLoader.getResource(...).getPath() 正在返回:
/D:/Projects/myapp/build/resources/main/file.txt
Paths.get() 不喜欢它。显然/D 之后的“:”是一个“非法字符”。 (注意路径看起来是正确的,文件确实在那里)
是哪一个导致了问题? ClassLoader.getResource() 是返回无效路径还是 Paths.get() 无所作为?
稍后
java中的路径似乎有多种不同的格式。各种框架似乎对什么是对什么是错并没有完全一致,因此它们创建和接受的路径之间存在各种差异。
在此示例中,Paths.get() 实际上并不期望路径中的前导斜杠:
/D:/Projects/myapp/build/resources/main/vertex.vs.glsl <- EVIL
D:/Projects/myapp/build/resources/main/vertex.vs.glsl <- OK
我想现在的问题是:如何正确清理ClassLoader.getResource() 返回的文件路径以便与Paths.get() 一起使用?它们的两种文件路径格式还有其他区别吗?
【问题讨论】:
标签: java path classloader