获取另一个 jar 中一个 jar 的文件系统

2024-01-13

这就是我想做的:

FileSystem fs1 = FileSystems.newFileSystem(Paths.get("f1.jar"), null);
FileSystem fs2 = FileSystems.newFileSystem(fs1.getPath("/f2.jar"), null);

但我得到一个java.nio.file.ProviderNotFoundException被抛出FileSystems.newFileSystem()在第二行。

我究竟做错了什么?

Thanks!


You 首先提取嵌套罐子。

编辑: oracle论坛上的答案没有给出明确的原因为什么你必须先提取jar。

这是报价from https://blogs.oracle.com/rajendrag/entry/zip_file_system_providerRajendra Gutupalli 的博客(com.sun.nio.zipfs 的作者):

假设我们有一个嵌套在 Zip 中的 Jar 文件。以下程序打印嵌套 jarCompress1.jar 文件内的 MANIFEST.MF 文件的内容。

import java.io.BufferedInputStream; 
import java.nio.file.*; 
import java.util.HashMap; 
import java.util.Map;

public class ReadEntry {

    public static void main(String... args) throws Exception {
        Path zipfile = Path.get("c:/zips/zip1.zip");
        Map<String, String> env = new HashMap();
        FileSystem manager = FileSystems.newFileSystem(zipfile, env,null);
        Path path = manager.getPath("/jarCompress1.jar/META-INF/MANIFEST.MF");
        System.out.println("Reading input stream");
        BufferedInputStream bis = new BufferedInputStream(path.newInputStream());
        int ch = -1;
        while ((ch = bis.read()) != -1) {
            System.out.print((char) ch);
        }
    } 
}

还有另一个one https://blogs.oracle.com/rajendrag/entry/zip_file_system_provider_implementation:

这里需要注意的重要一点是,zip 文件路径可以扩展到文件路径名中的嵌套 zip 或 jar。例如,/home/userA/zipfile.zip/DirA/dirB/jarFile.jar/META-INF/MANIFEST.MF 访问 Zip 文件“/home/userA/zipfile.zip”内的 jar 文件“jarFile.jar”。

我无法重现所声称的行为。下一个代码:

try (FileSystem fs1 = FileSystems.newFileSystem(Paths.get("f1.zip"), null)) {
    Path path = fs1.getPath("/f2.zip/test.txt");
    Files.lines(path).forEach(System.out::println);
}

给出例外

Exception in thread "main" java.nio.file.NoSuchFileException: f2.zip/test.txt
  at com.sun.nio.zipfs.ZipFileSystem.newInputStream(ZipFileSystem.java:544)
  at com.sun.nio.zipfs.ZipPath.newInputStream(ZipPath.java:645)
  at com.sun.nio.zipfs.ZipFileSystemProvider.newInputStream(ZipFileSystemProvider.java:278)
  at java.nio.file.Files.newInputStream(Files.java:152)
  at java.nio.file.Files.newBufferedReader(Files.java:2781)
  at java.nio.file.Files.lines(Files.java:3741)
  at java.nio.file.Files.lines(Files.java:3782)

可能有人会确认这是一个错误或指出我的代码中的错误。

同时回到你原来的问题。您无法在 zip(jar) 中创建文件系统,因为没有FileSystemProvider(查看源代码newFileSystem方法)可以创建FileSystem来自 ZipPath 的实例。因此,您必须选择从外部 zip 中提取或编写自己的FileSystemProvider执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取另一个 jar 中一个 jar 的文件系统 的相关文章

随机推荐

  • 如何以编程方式创建布局文件

    我想知道是否可以动态创建一个 XML 布局文件来显示给用户 这个想法是能够从中央服务器检索布局文件 该文件可以显示这个动态的 服务器驱动的 GUI XML 布局文件被打包为二进制文件 并且膨胀也从二进制文件发生 我不相信任意 XML 都可以
  • 单击选项卡时返回 UINavigationController 堆栈的顶部?

    我有一个UITabBarController有 4 个选项卡的界面 每个选项卡都有一个UINavigationController 我怎样才能回到最上面UIViewController每一个UINavigationController每当按
  • 搜索结果使用reactjs突出显示结果

    我试图获得像 YouTube 这样的搜索结果 只是尝试 但我遇到了一些问题 我已经在codesandbox中制作了工作应用程序here https codesandbox io s react codesandbox kyd4g 我有一个搜
  • DataBinding/WPF C# 的通用可观察字典类

    我正在尝试在 C 中为 WPF DataBinding 创建一个可观察字典类 我在这里找到了安迪的一个很好的例子 WPF 中字典的两种方式数据绑定 https stackoverflow com questions 800130 two w
  • 如何使用 jQuery UI 日历/日期选择器显示周而不是日?

    在过去的几个月里 我一直在使用 jQuery UI 日历 日期选择器 并取得了巨大的成功 我收到了一项新要求 允许选择一周 周日至周六 而不是一天 以前有人完成过这个吗 按周而不是按天突出显示 在文本框 标签中显示开始日期和结束日期而不是单
  • 在角度反应形式验证器中使用 google-libphonenumber

    这是使用该库的基本用例 我需要验证该号码是否有效 我用的是有角度的反应形式 https angular io guide reactive forms 自定义验证器 https angular io guide form validatio
  • numpy loadtxt 跳过第一行

    当我尝试使用 numpy 的 loadtxt 函数从 CSV 文件导入数据时 遇到一个小问题 这是我拥有的数据文件类型的示例 将其命名为 datafile1 csv Comment 1 Comment 2 x y z 1 2 3 4 5 6
  • 将异常类型添加到位框架已知异常

    根据文档 位框架中有一些已知的异常类型 https docs bit framework com docs bit server side web api html exceptions https docs bit framework c
  • 修复 WooCommerce 中购物车最大优惠券折扣百分比

    我在 woocommerce 中有一个优惠券代码 XYZ25 其中包含 25 的折扣 最大折扣为 250 卢比 如果用户应用优惠券代码 XYZ 25 获得 25 的折扣 我如何限制用户获得不超过 250 卢比的折扣 自 Woocommerc
  • ajax给出空白响应

    我有一个 xml 内容存储在该位置 http localhost 8080 cleo primer rest elements search uid 1 query facebook
  • 如何在 Eclipse RCP 中实现内容辅助的文档弹出窗口

    我已经实现了自己的编辑器并为其添加了代码完成功能 我的内容助理在源查看器配置中注册 如下所示 public IContentAssistant getContentAssistant ISourceViewer sourceViewer i
  • 谷歌云数据实验室和谷歌云人工智能平台笔记本有什么区别?

    我正在研究建立端到端机器学习管道的最佳方法 并评估数据探索组件选项 我试图找出谷歌云数据实验室和谷歌云人工智能平台笔记本之间的区别 它们似乎都提供类似的功能 因此不确定它们为何存在 或者其中一个是否是另一个的新迭代 如果它们不同 其中一种相
  • TensorFlow - 如何在忽略零权重的情况下计算梯度?

    我想通过将一些权重设置为 0 0 每层中的特定权重 以此处讨论不重要的方式选择 来实现剪枝 以 1 在推理过程中忽略它们 2 在训练过程中忽略它们 我知道我可以在推理过程中忽略它们 方法是对每一层应用一个掩码 其中 1 位于我想要保留的权重
  • iOS 导航状态栏

    谷歌地图已经有一个蓝色栏 只要您在导航中就会出现 我想知道我自己如何实现这一点 有任何想法吗 配置您的应用程序以使用 Core Location在后台 当您请求授权时 正如您现在必须在 iOS 8 中执行的那样 请请求 使用时 授权 每当您
  • Android 光标怎么会处于负数位置?

    在学习迭代游标时 我learned https stackoverflow com questions 10723770 whats the best way to iterate an android cursor我需要首先移动到位置 1
  • 如何在 Laravel 中实现 Gravatar?

    在 Laravel 中实现 Gravatar URL 的最快方法是什么 我有一个必填的电子邮件地址字段 但我不想为 Gravatars 创建新列 并且我更愿意使用本机Auth user 属性 事实证明 您可以使用 Laravel 变异器来创
  • 如何在部署期间配置 Cosmos Db 集合

    使用 Azure 以 GlobalDocumentDB 模式部署 Cosmos Db 数据库时资源管理器模板 https learn microsoft com en us azure templates microsoft documen
  • mysql 根据原始 sql 创建过程的问题

    我正在 Symfony2 中处理一个应用程序项目 通过注册 每个客户端都会创建一个数据库 模式是在客户端登录时由验证服务创建的 该应用程序需要一些数据才能工作 到目前为止 我使用了 ORM 夹具 由于多种原因 我现在需要从夹具加载转向更接近
  • 不区分大小写的正则表达式 - VBA

    Background 刚才我正在回答一个问题 正在玩玩RegEx within VBA 目标是创建字符串中存在的名称列表 RegEx是首选解决方案 因为我们想防止VBA绊倒看起来相似的标点符号和子字符串 例如 Jack or Jacky S
  • 获取另一个 jar 中一个 jar 的文件系统

    这就是我想做的 FileSystem fs1 FileSystems newFileSystem Paths get f1 jar null FileSystem fs2 FileSystems newFileSystem fs1 getP