jar 中的 Java 访问文件导致 java.nio.file.FileSystemNotFoundException

标签 java java-7 nio

在尝试使用我的 java 应用程序将我的 jar 文件中的一些文件复制到临时目录时,抛出以下异常:

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(Unknown Source)
    at com.sora.util.walltoggle.pro.WebViewPresentation.setupTempFiles(WebViewPresentation.java:83)
   ....

这是我的 setupTempFiles(带有行号)的一小部分:

81. URI uri = getClass().getResource("/webViewPresentation").toURI();
//prints: URI->jar:file:/C:/Users/Tom/Dropbox/WallTogglePro.jar!/webViewPresentation
82. System.out.println("URI->" + uri );
83. Path source = Paths.get(uri);

webViewPresentation 目录位于我的 jar 的根目录中:

enter image description here

只有当我将我的应用程序打包为 jar 时才会出现此问题,在 Eclipse 中调试没有问题。我怀疑这与 bug 有关但我不确定如何解决这个问题。

任何帮助表示赞赏

如果重要的话:

我正在使用 Java 8 build 1.8.0-b132

Windows 7 Ult. x64

最佳答案

FileSystemNotFoundException 表示文件系统无法自动创建;而且你还没有在这里创建它。

给定你的 URI,你应该做的是拆分 !,使用它之前的部分打开文件系统,然后从 ! 之后的部分获取路径:

final Map<String, String> env = new HashMap<>();
final String[] array = uri.toString().split("!");
final FileSystem fs = FileSystems.newFileSystem(URI.create(array[0]), env);
final Path path = fs.getPath(array[1]);

请注意,一旦你完成了 .close() 你的 FileSystem

关于jar 中的 Java 访问文件导致 java.nio.file.FileSystemNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605666/

相关文章:

java - 处理空 ArrayList 的 Android BaseAdapter

java - 如何开始一个新项目

java - 收到致命警报 : protocol_version build failure Gradle/Maven

java - Netty 使用标准套接字获取响应

java - 什么可能阻止显示 HomeAsUp 图标

java - 从 iTunes Connect 运行自动摄取 java 文件

java - 这是 Swing Java 7 渲染错误吗?

java - 无法使用 JDK 7u21 和 7u25 调试小程序

Scala 文件哈希

java - 如何在 Java 中查找已移动/重命名的文件