java - 在 Java 中打开受密码保护的 RAR 文件
问题描述
我已经在 Google 上搜索了一段时间,但似乎找不到任何允许我使用 Java(压缩文件)打开受密码保护的 RAR 文件的库。
如果有人知道,请与我分享(如果可能的话,包括 maven 依赖项)。
我一直在研究 JUnRar 和 java-UnRar,但据我所知,它们都不支持受密码保护的文件。
解决方案
WinRAR 附带两个实用程序(unrar.exe 和 rar.exe)。在 Powershell 中,您可以通过调用以下命令来解压缩存档:unrar e .\my-archive.rar -p[your-password]
exec()
现在,您可以使用Java 的 Runtime 类的方法进行此调用:
public class UnArchiver {
public static void main(String[] args) {
try {
String command = "unrar.exe e .\my-archive.rar -pQWERT";
Runtime.getRuntime().exec(command);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Code not tested
但是,此选项有一些缺点:
密码作为字符串处理(处理密码时的坏习惯)
我不知道如何
exec()
为 Windows JVM 实现。我认为密码最终存在不属于它的不安全位置(日志文件?)的风险。对我来说,
exec()
它总是有味道(因为它引入了与环境的耦合 - 在这种情况下unrar.exe
,乍一看对于你的代码的后续维护者来说是不可见的)unrar.exe
您引入了只能在 Windows 上运行的平台依赖项(在本例中为 Windows) (感谢@SapuSeven)
注意:在 Stackoverflow.com 上搜索时,您可能偶然发现了Junrar库。它不能用于提取加密档案(参见此文件的第 122 行)。
推荐阅读
- java - 如何最好地调用用户JDK版本中可能不存在的方法?
- javascript - 试图让javascript在单击按钮时为画布元素设置动画。但是画布会出现一秒钟然后消失。
- xamarin.forms - Xamarin UWP Visual Asset Generator - 我可以将它用于我在应用程序中使用的任何图像吗?
- python-3.x - 在 for 循环中使用 if-else
- python - 仅替换数据框中列中的第一个字符
- scss-mixins - SCSS中的#是什么意思
- dialogflow-es - Google 粗略位置上的操作始终为空
- c++ - 提取 __VA_ARGS__ 的第一个参数
- android - 设备Camera与Unreal中不同级别的默认Camera混淆
- openscad - CGAL 错误:断言违反!表达式:e->incident_sface()