将二进制文件复制到 jar 之外

Posted

技术标签:

【中文标题】将二进制文件复制到 jar 之外【英文标题】:Copying a binary file outside of a jar 【发布时间】:2013-03-11 14:50:00 【问题描述】:

我在我的 jar 文件中打包了一个 exe,我试图将它复制到一个临时位置,以便我可以使用 Desktop.browse() 运行它,为此我使用 @987654323 使用输入流构造函数设置了一个扫描仪@,然后用printwriter 将所有内容写入文件。出现的问题说exe无效。我认为这是由于丢失了一些二进制数据。如果有人可以提供帮助,请发表评论。

    Scanner sc = new Scanner(ClassBuilder.class.getResourceAsStream("jd-gui.exe"));
    File copy = new File("C://users//Owner//Desktop//java//jd-gui.exe");
    copy.createNewFile();
    PrintWriter writer = new PrintWriter(copy);

    while(sc.hasNextLine())
        writer.println(sc.nextLine());

    writer.flush();
    writer.close();
    sc.close();

    Desktop.getDesktop().browse(copy.toURI()); 

【问题讨论】:

请出示代码。制作简短而甜蜜,只有重要的部分:sscce.org 扫描仪用于阅读文本。 PrintWriter 用于写入文本。 exe文件是二进制文件。使用流。 您需要将 .exe 文件复制到新位置吗? getResourceAsStream() 返回一个 InputStream。从此流中读取字节直到到达末尾,然后将它们写入 FileOutputStream。 【参考方案1】:

如前所述,将流用于二进制数据。 Commons io 使复制流变得容易。比如:

InputStream in = getClass().getResourceAsStream("jd-gui.exe");
OutputStream out = new FileOutputStream("jd-gui.exe");
IOUtils.copy(in, out);

【讨论】:

以上是关于将二进制文件复制到 jar 之外的主要内容,如果未能解决你的问题,请参考以下文章

将包含二进制文件的文件夹结构复制到本机库文件夹

如何使用 Javacpp 预设二进制文件

macOS 中的特权文件复制(将辅助二进制文件安装到 /usr/local/bin)

如何将二进制文件从 nuget 包复制到我的输出文件夹?

将xgboost二进制预测保存到提交csv文件

我需要我的 Debian 规则文件来简单地将文件复制到它的目标