我想从 ressources 文件夹中获取一个文件,我尝试了很多方法,但总是失败。
这是我目前使用的方法
File bundledConfigFile = new File(Objects.requireNonNull(Config.class.getClassLoader().getResource("config.json")).getPath());
System.out.println(bundledConfigFile);
try {
parseConfig(rootConfigFile);
} catch (IOException e) {
logger.error("Can't access config : ", e);
Runtime.getRuntime().exit(ExitCodes.ERROR.getValue() + ExitCodes.UNRECOVERABLE.getValue());
}
它总是告诉我那个错误:
[13:13:09.006] main Config ERROR Can't access config :
java.io.FileNotFoundException: config.json (Le fichier spécifié est introuvable)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
at java.base/java.io.FileReader.<init>(FileReader.java:75)
at org.laconfrerie.discord.javabot.core.Config.parseConfig(Config.java:138)
at org.laconfrerie.discord.javabot.core.Config.<init>(Config.java:41)
at org.laconfrerie.discord.javabot.core.Config.getUnsafeProperty(Config.java:80)
at org.laconfrerie.discord.javabot.core.Config.getProperty(Config.java:93)
at org.laconfrerie.discord.javabot.core.Main.main(Main.java:43)
我不明白为什么它找不到它,因为 parseConfig(rootConfigFile)
返回了好的路径,又名
D:\Documents\DEV\LaConf\Javabot\build\resources\main\config.json
我的问题有什么解决方案吗?
答案 0 :(得分:1)
当您将文件放入 JAR 文件时,它在文件系统中不再具有路径名。这意味着无法创建引用该资源副本的 File
。
您的选择是:
getResourceAsStream
打开资源并以这种方式阅读。getResource
返回的 URL。File
作为临时文件。请注意,如果 getResource
调用返回可以转换为文件系统路径名的 "file:"
URL,那么您可以这样做:
URL url = ... getResource(...);
URI uri = url.toURI();
File file = new File(uri);
如果不满足将 URI 转换为文件系统路径名的先决条件,File
构造函数将抛出异常。
(这就是 JAR 文件中的资源会发生的情况。)
另外,请注意表示文件不存在的 file:
URL 将被转换为 File
也表示文件不存在。您将无法打开和阅读它。