【问题标题】:Upload a file located inside a jar上传位于 jar 内的文件
【发布时间】:2020-06-17 23:46:03
【问题描述】:

我正在尝试上传位于 jar 中的文件。当我正常上传文件时,它工作正常(这是预期的,因为文件在文件系统上)但是当我用位于其中的文件打包一个 jar 时它不起作用。 我试过用:

this.getClass().getClassLoader().getResource("big_bird.txt") //不起作用

新文件("big_bird.txt".toURI()) //不起作用

this.getClass().getClassLoader().getResourceAsStream("big_bird.txt") //有点像我看到路径但我无法获取文件

我需要能够抓取文件并将其全部上传到 jar 中,所以任何人都可以告诉我如何做到这一点吗?

【问题讨论】:

  • 您需要物理文件吗?如果是,请创建一个临时文件,用您应该能够通过类加载器读取的资源内容填充它并上传临时文件。为什么你不能得到实际的文件?因为它被打包在 JAR 中,并且在您运行 JAR 时不会以物理文件的形式出现。
  • “无法获取文件”是什么意思?您究竟是如何尝试“上传”它的?
  • 是的,我需要物理文件。当我说“无法获取文件”时,我的意思是我无法操纵要上传的文件。我上传的方式是使用 selenium locator.sendKeys(/pathToFile/"big_bird.txt")

标签: java executable-jar


【解决方案1】:
  1. 将文件作为流从 jar 中读取

InputStream in = getClass().getResourceAsStream("big_bird.txt");

  1. 创建临时文件

File tempFile = File.createTempFile("big_bird", "txt");

  1. 将输入流写入临时文件
try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
    int read;
    byte[] bytes = new byte[1024];
    while ((read = in.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
    }
}
  1. 现在您可以使用/上传tempFile

【讨论】:

  • 我会试试这个,如果它有效,我会返回并接受作为答案。谢谢
猜你喜欢
  • 2018-01-10
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多