我有一个Maven项目,在一个方法内部,我想为我的资源文件夹创建一个路径。这样做的方法如下:
try {
final URI uri = getClass().getResource("/my-folder").toURI();
Path myFolderPath = Paths.get(uri);
} catch (final URISyntaxException e) {
...
}
生成的URI
看起来像jar:file:/C:/path/to/my/project.jar!/my-folder
。
堆栈跟踪如下:
Exception in thread "pool-4-thread-1" java.nio.file.FileSystemNotFoundException
at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
at java.nio.file.Paths.get(Paths.java:143)
URI
看起来是有效的。在!
之前的部分指向生成的jar文件,之后的部分指向存档根目录中的my-folder
。我以前已经使用过这些说明来创建到我的资源的路径。为什么现在会出现异常?
URL
,则不需要File
或Path
来读取其内容。您只需调用URL.openStream()
并从该方法返回的InputStream
中读取即可。如果您确实必须拥有File
或Path
对象,则需要下面提到的FileSystem
修复程序。但是,大多数事情实际上不需要文件,并且可以处理InputStream
或Reader
接口,因此如果可能的话,我建议首先使用URL.openStream()
路线。 - Shadow Man