无法从资源文件夹中获取文件

时间:2021-04-18 12:46:45

标签: java android

我想从 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

我的问题有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

当您将文件放入 JAR 文件时,它在文件系统中不再具有路径名。这意味着无法创建引用该资源副本的 File

您的选择是:

  • 使用 getResourceAsStream 打开资源并以这种方式阅读。
  • 使用资源 URL 引用资源;即 getResource 返回的 URL。
  • 将 JAR 文件中的资源复制到临时文件中,并使用 File 作为临时文件。

请注意,如果 getResource 调用返回可以转换为文件系统路径名的 "file:" URL,那么您可以这样做:

  URL url = ... getResource(...);
  URI uri = url.toURI();
  File file = new File(uri);

如果不满足将 URI 转换为文件系统路径名的先决条件,File 构造函数将抛出异常。

(这就是 JAR 文件中的资源会发生的情况。)

另外,请注意表示文件不存在的 file: URL 将被转换为 File 也表示文件不存在。您将无法打开和阅读它。