Windows 上 JAR 文件中具有相同大小写的文件

Posted

技术标签:

【中文标题】Windows 上 JAR 文件中具有相同大小写的文件【英文标题】:File with same case in JAR file on Windows 【发布时间】:2015-10-08 22:35:16 【问题描述】:

我正在我的一个旧项目中编辑字节码以修复错误,因为我不再拥有源代码。在我重新插入修改后的类之前,一切都很好。

我们发布时代码被混淆了,所以我有两个文件:hl.class 和 hL.class。 hl.class 是我要重新插入的那个,但是使用 WinRAR 会导致 hl.class 只是替换 hL.class 并删除旧的 hl.class!这很烦人,我不知道如何重新插入该死的文件。

有人有什么见解吗?有没有这样的节目不会成为这样的天后?

谢谢!

【问题讨论】:

为什么不试试java反编译器? 在这种情况下编辑字节码要快得多,因为我只需要更改一个布尔值。 这就是使用 zip 工具来操作 jar 文件的情况之一。好吧,你知道每个jdk都包含一个名为jar的命令行工具,它可以处理jar文件并且区分大小写对吗? 【参考方案1】:

简而言之,使用更好的压缩工具。我假设你被困在 Windows 上,它的文件系统不区分大小写。即使 GUI zip 工具都不起作用,您也可以随时打开 Python 命令提示符,它允许以编程方式访问 zip 文件,包括指定要插入的内容的确切文件名。

如果您可以使用 Linux 或 Mac 机器,那就简单多了。只需像往常一样编辑文件并将其放回 zip 中。由于 hl.class 和 hL.class 的文件名不同,所以不会有任何问题。

附:另一个选项 - the Krakatau assembler 具有将类文件直接输出到 jar 的选项,即使在 Windows 上也可以正确处理区分大小写的文件名。 Krakatau 通常也是用于对类文件进行低级修改的好工具。 (披露,我写的)

【讨论】:

其实这并不是什么大问题,因为每个 jdk 都包含一个正确的工具,即使在 Windows 下也是如此…… 啊,我没有意识到这一点。但是,对于文件名在主机文件系统上无效的情况,您仍然需要一个编程解决方案,例如超过 32k 个字符的类名。 我设法找到了解决我的问题的跨平台文件管理器。但是感谢您的反馈!【参考方案2】:

其实我在发这个的那天就找到了解决办法,很抱歉忘记回复和发帖了!

如果您像我一样使用 Windows 机器,我发现了一个名为 muCommander 的便捷程序,它是一个不区分大小写的跨平台文件管理器。我设法将文件放入其中。

您还可以调整一些注册表值以使 Windows 识别区分大小写的文件,但我建议使用我在上面发布的程序以使其更简单。

谢谢大家!

【讨论】:

以上是关于Windows 上 JAR 文件中具有相同大小写的文件的主要内容,如果未能解决你的问题,请参考以下文章

java的jar文件

在网络上部署Corda节点时,哪些JAR必须完全相同?

Visual Studio:XP和Windows7中相同可执行文件的内存大小不同

Windows获取具有大小的卷上所有文件的列表

在 Windows 上更改文件的大小写? [复制]

在 Windows 上更改文件的大小写? [复制]