当前位置: 首页 > 知识库问答 >
问题:

如何从当前运行的jar中复制文件

方昊阳
2023-03-14
public String tempDir = System.getProperty("java.io.tmpdir");
public String workingDir = dllInstall.class.getProtectionDomain().getCodeSource().getLocation().getPath();

public boolean installDLL() throws UnsupportedEncodingException {

try {
             String decodedPath = URLDecoder.decode(workingDir, "UTF-8");
             InputStream fileInStream = null;
             OutputStream fileOutStream = null;

             File fileIn = new File(decodedPath + "\\loadAtRuntime.dll");
             File fileOut = new File(tempDir + "loadAtRuntime.dll");

             fileInStream = new FileInputStream(fileIn);
             fileOutStream = new FileOutputStream(fileOut);

             byte[] bufferJNI = new byte[8192000013370000];
             int lengthFileIn;

             while ((lengthFileIn = fileInStream.read(bufferJNI)) > 0) {
                fileOutStream.write(bufferJNI, 0, lengthFileIn);
             }

            //close all steams
        } catch (IOException e) {
      e.printStackTrace();
             return false;
        } catch (UnsupportedEncodingException e) {
             System.out.println(e);
              return false;
        }

提前谢了。

共有1个答案

程化
2023-03-14

由于您的DLL被捆绑在jar文件中,您只需尝试使用ClassLoader#GetResourceAsStream将它们作为资源,并在硬盘上任何您想要的地方将它们写入二进制文件即可。

下面是一些示例代码:

InputStream ddlStream = <SomeClassInsideTheSameJar>.class
    .getClassLoader().getResourceAsStream("some/pack/age/somelib.dll");

try (FileOutputStream fos = new FileOutputStream("somelib.dll");){
    byte[] buf = new byte[2048];
    int r;
    while(-1 != (r = ddlStream.read(buf))) {
        fos.write(buf, 0, r);
    }
}

上面的代码将把位于包some.pack.age中的dll解压缩到当前工作目录。

 类似资料:
  • 问题内容: 我是否可以使用任何内置方法允许用户从当前运行的JAR中提取文件并将其保存在其磁盘上? 提前致谢。 问题答案: 使用(docs),之后您可以执行任何操作。 对于两层式,您可以使用Commons IO复制方法之一。

  • 问题内容: 我在Bean Shell Sampler中尝试了以下方法; 看来,它无法运行。.我是否以正确的方式进行操作? 问题答案: 如果您需要使用Beanshell进行此操作,建议对process命令行进行以下修改: 有关更多信息,请参见cmd.exe文档。 但是,在大多数情况下,使用OS Process Sampler 可能更容易,它允许执行任意命令和程序。了解如何从JMeter本地和远程运行

  • 问题内容: 我想从罐子中复制文件。我要复制的文件将被复制到工作目录之外。我已经做过一些测试,所有尝试使用的方法都以0字节文件结尾。 编辑 :我希望通过程序而不是手动完成文件的复制。 问题答案: 首先,我想说的是,之前发布的一些答案是完全正确的,但是我想告诉我,因为有时我们不能在GPL下使用开放源代码库,或者因为我们懒得下载jarXD或其他文件无论您的理由在这里,还是一个独立的解决方案。 下面的函数

  • 问题内容: 假设我的jar包“ com.test.io”中有一个名为test.txt的文件。 我将如何编写一个类来检索此文本文件,然后将内容复制到文件系统上的新文件中? 问题答案: 假设jar在您的类路径中:

  • 如何在 PyCharm 中运行当前文件?我想要一个热键,它将使用项目默认的 python 解释器执行当前文件(无论是普通文件、暂存文件还是暂存缓冲区)。我不想创建自定义运行配置,而只需使用默认的 Python 配置启动即可。这样的事情可能吗?

  • 我想将当前行复制到它下面的新行。我找到了这篇文章,但在options>键盘中找不到他们谈论的选项()。 2017年我们如何做到这一点?