我正在开发一个Java Swing应用程序,我有一个文件(例如key.text),其中包含用于解密的密钥,解密是使用第三方库执行的,而我所做的解密工作就是将key.txt传递给库方法。

Eclipse工作区结构

src
  com.org.controller
  com.org.beans
  key.txt


我尝试以以下方式传递bin路径,

String keyFilePath = "bin/key.txt";
aesEncrypt.setSecretKey(keyFilePath); // passing path to library method


当我在Eclipse中运行时,代码片段运行正常,但是将其包装在罐子中时却无法正常工作。

我尝试以以下方式使用getResource(),但这也无法正常工作。

URL url = this.getClass().getResource("/key.txt");
File file = new File(url.toURI());
String keyFilePath = file.getAbsolutePath();
aesEncrypt.setSecretKey(new File(keyFilePath).getAbsolutePath()); // passing path to library method


所以我的问题是,如何传递驻留在已建jar中的资源路径?

最佳答案

由于您正在调用的API似乎需要一个文件名,因此您需要将资源(是zip条目而不是实际文件)复制到实际文件中:

Path file = Files.createTempFile(null, ".txt");
try (InputStream stream = this.getClass().getResourceAsStream("/key.txt")) {
    Files.copy(stream, file, StandardCopyOption.REPLACE_EXISTING);
}

aesEncrypt.setSecretKey(file.toString());

关于java - 文件路径在JAR文件中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40997463/

10-14 15:33
查看更多