上传位于jar包内的文件

3
我正在尝试上传位于jar文件内部的文件。当我正常上传文件时,它可以正常工作(因为该文件位于文件系统上),但是当我将文件打包到jar中并且文件位于其中时,它无法正常工作。
我已尝试使用: this.getClass().getClassLoader().getResource("big_bird.txt") //不起作用 new File("big_bird.txt".toURI()) //不起作用 this.getClass().getClassLoader().getResourceAsStream("big_bird.txt") //有点工作,因为我看到路径,但是无法获得文件
我需要能够在文件位于jar中时抓取并上传该文件,因此是否有人可以给我一些关于如何完成此操作的见解?

你需要一个物理文件吗?如果是的话,创建一个临时文件,将通过类加载器可以读取的资源内容填充到其中,并上传临时文件。为什么无法获取实际文件?因为它被打包在JAR文件中,在运行JAR文件时并不存在作为物理文件的形式。 - Smutje
“无法获取文件”是什么意思?你具体是如何尝试“上传”它的? - chrylis -cautiouslyoptimistic-
是的,我需要实际的文件。当我说“无法获取文件”时,我的意思是无法操作文件以进行上传。我是通过使用Selenium locator.sendKeys(/pathToFile/"big_bird.txt") 进行上传的。 - frass
1个回答

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);
    }
}

现在您可以使用/上传 tempFile

我会尝试这个,如果它有效,我会回来并接受它作为答案。谢谢。 - frass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接