当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《jar中的Java访问文件导致java.nio.file.FileSystemNotFoundException》经验,为你挑选了1个好方法。

在尝试使用我的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的根目录中:

在此输入图像描述

当我将我的应用程序打包为jar时,此问题才会退出,在Eclipse中进行调试没有问题.我怀疑这与这个bug有关,但我不确定如何纠正这个问题.

任何帮助赞赏

如果事项:

我在Java 8 build 1.8.0-b132上

Windows 7 Ult.64位



1> fge..:

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

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

final Map 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一旦你用它做.


是的,这是一个没有很好记录的东西...如果这些路径不是来自同一个文件系统提供者,你应该``.resolve()`或`.relativize()`其他路径的`.toString()`值...我也被我咬了(我正在通过FTP开发FileSystem实现)
这种方法可以与嵌套jar一起使用吗,例如`jar:file:outer.jar!/inner.jar!/ file.txt`?
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有