Zip 文件是使用 Windows 路径分隔符创建的

2024-04-29

我使用下面的代码创建一个 zip 文件。 Zip 已正确创建,然后在我的程序中,我尝试从此文件中获取 zip 条目。如果我打印一个 zip 条目名称,我会得到 Windows 路径分隔符(例如\a\b\c)。但我需要这样a/b/c。我还没有发布阅读邮政编码。

public static void zipFolder(File subdirs, String ZipName) throws FileNotFoundException, IOException {

   try (FileOutputStream fileWriter = new FileOutputStream(location+File.seperator+ ZipName); 
        ZipOutputStream zip = new ZipOutputStream(fileWriter)) {
            addFolderToZip(subdirs, subdirs, zip);
   }
}

private static void addFileToZip(File rootPath, File srcFile, ZipOutputStream zip) throws FileNotFoundException, IOException {

   if (srcFile.isDirectory()) {
      addFolderToZip(rootPath, srcFile, zip);
   } else {
      byte[] buf = new byte[1024];
      int len;
      try (FileInputStream in = new FileInputStream(srcFile)) {
         String name = srcFile.getPath();
         name = name.replace(rootPath.getPath() + File.separator, "");
         zip.putNextEntry(new ZipEntry(name));
         while ((len = in.read(buf)) > 0) {
                    zip.write(buf, 0, len);
         }
      }
   }
}

private static void addFolderToZip(File rootPath, File srcFolder, ZipOutputStream zip) throws FileNotFoundException, IOException {
   for (File fileName : srcFolder.listFiles()) {
     addFileToZip(rootPath, fileName, zip);
   }
}

您的问题的根本原因在以下代码片段中:

  String name = srcFile.getPath();
  name = name.replace(rootPath.getPath() + File.separator, "");
  zip.putNextEntry(new ZipEntry(name));

The 文件.getPath() https://docs.oracle.com/javase/7/docs/api/java/io/File.html#getPath()方法返回带有系统相关默认名称分隔符的路径。

所以,根据this https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4244499

在 ZIP 文件中,路径名使用正斜杠 / 作为分隔符,按照ZIP spec https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT(4.4.17.1)。这需要在 Windows 等系统上与本地 file.separator 进行转换。 API (ZipEntry) 不负责转换,并且没有记录程序员处理它的需要。

您应该按以下方式重写此代码片段:

  String name = srcFile.getPath();
  name = name.replace(rootPath.getPath() + File.separator, "");
  if (File.separatorChar != '/') {
     name = name.replace('\\', '/');
  }
  zip.putNextEntry(new ZipEntry(name));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zip 文件是使用 Windows 路径分隔符创建的 的相关文章

  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • ZipArchives 存储绝对路径

    我可以使用相对路径压缩文件吗 例如 zip gt addFile c wamp www foo file txt ZIP 应该具有如下目录结构 foo gt file txt and not wamp gt www gt foo gt fi
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • “else”在Python中被认为是有害的?

    In an answer https stackoverflow com questions 855759 python try else 855783 855783 by S Lott https stackoverflow com us
  • 如何在 R 中对多维面板数据运行回归

    我需要对面板数据进行回归 它有 3 个维度 年份 公司 国家 地区 例如 year comp count value x value y 2000 A USA 1029 0 239481 2000 A CAN 2341 4 129333 2
  • 将应用程序委托定义为常量?

    我正在尝试编写 iPhone 应用程序 但遇到了问题 我已经在类中声明了一个常量作为应用程序委托 define ikub iKubMobileAppDelegate UIApplication sharedApplication deleg
  • 使用 Twilio 进行调用时是否可以传递自定义参数?

    我正在使用 Twilio PHP 库 但问题实际上与语言无关 我尝试做类似以下的事情 client new Services Twilio MyAccountSID My auth token client gt account gt ca
  • Qt 5.4/Qml:防止绑定循环

    我有一个全局单例 设置 它保存应用程序设置 当我尝试运行以下代码时 我得到一个QML CheckBox Binding loop detected for property checked CheckBox checked Settings
  • 未找到命令/使用自动测试通过“捆绑安装”安装缺少的 gem 二进制文件

    我对 RoR 完全陌生 我正在关注迈克尔 哈特尔的书 我无法运行自动测试 请提出问题所在以及解决方案 当我在 Rails 项目目录中的命令行运行 自动测试 时 我得到以下信息 bash autotest command not found
  • 信号器 CORS 问题

    在我的服务器端 我使用带有信号器的 Web api 2 在我的客户端 我使用的是 angularjs 这是我启动信号连接时的 http 请求 gt GET gt http example com signalr negotiate clie
  • 如何用c++编写可移植的代码?

    编写可移植代码时应该记住哪些事情 由于我是一个c 初学者 所以我想从一开始就练习它 Thanks 学习使用标准库 读书 例如this one http www mindview net Books TICPP ThinkingInCPP2e
  • BashOperator 为其他 PythonOperators 中使用的库引发 ImportError

    我的 dag 构建器模块中有一组任务 该模块使用 Airflow 中全球使用的 Python 运算符 我正在 kubernetes 上使用 docker 部署气流 任务失败并显示错误消息 no module named pandas 使用
  • Mysql乘法查询

    我有一个名为 产品 的表 其中包含一个名为 价格 的字段 我只想将每种产品的价格加倍 请您帮我提供一条可以在 PHP myAdmin 中运行的 SQL 语句 update products set price price 2
  • 如何使用 CodeIgniter 计算 MySQL 中给定行之前的行数?

    简单来说 如何计算某一行之前有多少行 我使用的是增量 ID 但行是随机删除的 因此仅检查 ID 是行不通的 比如说 如果我有 30 行 并且我根据名称 或任何实际内容 选择了一行 那么在该行之前有多少行 它可以是 16 1 12 或任何值
  • Winsock / BSD 套接字 - 接受目标 IP 不同于本地 IP 的 TCP 连接

    我将 LAN 上的一些传出 TCP 流量 最终也是 UDP 转发到本地 透明 代理服务器 然后再将其发送到互联网上 数据包似乎转发正确 我可以在 Wireshark 中看到 SYN 问题是绑定到端口X的accept 不接受与目标端口X的连接
  • 如何在C++中构建复合for循环?

    是另一个fora 的计数器部分 第三部分 允许循环for环形 在我尝试优雅地编写代码来生成直角三角形 我写了这个 但它无法编译 include
  • 如何将参数传递给 OLE 自动化对象(例如 MS Word)

    这主要是一个Delphi语法相关的问题 调用 OLE 对象的方法时 我需要将参数设置为 True 我需要在Word Automation中设置 这是来自词参考 http support microsoft com kb 285885 en
  • PHP APC 潜在的缓存猛击避免了密钥

    我在尝试使用时收到此错误apc store 我用谷歌搜索了一下 发现这是APC定时炸弹错误并看到了一些建议添加的修复apc slam defense Off 到 php ini 我需要知道这是否是由于编程错误而发生的 如果是 如何修复它 这
  • 动态或在构建时连接和缩小 JavaScript - ASP.NET MVC

    作为这个问题的扩展这里在用户控件中链接 JavaScript 库 https stackoverflow com questions 885990 linking javascript libraries in user controls
  • 请求响应后正文中出现奇怪的字符

    我正在使用 NodeJS 和 Request 来发布 JSON 并获取其中包含数据的结果 我使用 Postman 设置此请求 并获取完全可读的 JSON 数据 d type Qvision WoningenModule Lib aanbod
  • 使用 Boost.spirit 解析简单的重复文本宏

    我正在学习如何使用 Boost Spirit 库来解析字符串 这似乎是一个非常好的工具 但也很困难 所以 我想解析一个字符串 其中一些单词用 并将它们放入字符串向量中 这是一个例子 word1 word2 word3 这是一个简单的任务 我
  • 具有活动样式的 React router 无法按照我对根 URL 的要求工作

    我在主菜单中使用了这个 NavLinks 问题是当 测试 汽车 链接被点击 Test 链接也正在应用样式 我相信这是因为 Test 假设是其他链接的根 所以这是有道理的 但我想要 Test 应用活动样式时 链接也可以像其他链接一样工作 所以
  • Zip 文件是使用 Windows 路径分隔符创建的

    我使用下面的代码创建一个 zip 文件 Zip 已正确创建 然后在我的程序中 我尝试从此文件中获取 zip 条目 如果我打印一个 zip 条目名称 我会得到 Windows 路径分隔符 例如 a b c 但我需要这样a b c 我还没有发布