【发布时间】:2014-07-30 09:02:42
【问题描述】:
我有一个 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。我之前使用过这个说明来创建我的资源的路径。为什么我现在遇到异常?
【问题讨论】:
-
Zip 文件的格式是否为 ZipFileSystemProvider 可读?
-
文件夹存在于根目录下。并且jar文件是由Maven生成的,因此它应该是可读的。
-
如果您已经拥有
URL,则不需要File或Path即可阅读其内容。您只需调用URL.openStream()并从该方法返回的InputStream中读取。如果您确实必须拥有File或Path对象,那么您将需要下面提到的FileSystem修复。但是大多数东西并不真正需要文件并且可以处理InputStream或Reader接口,所以如果可能的话,我建议先走URL.openStream()路线。