SpringBoot - 访问资源文件夹中的文件

时间:2017-12-14 14:06:34

标签: java spring spring-boot file-io

我正在访问主类

中资源文件夹中的文件
File file = new ClassPathResource("remoteUnitsIdsInOldServer.txt").getFile();

我收到此错误:

java.io.FileNotFoundException: class path resource [remoteUnitsIdsInOldServer.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/lopes/Documents/workspace-sts-3.9.0.RELEASE/telefonicaUtils/target/telefonicaUtils-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/remoteUnitsIdsInOldServer.txt

我甚至打开jar文件,文件remoteUnitsIdsInOldServer.txt在那里,类

2 个答案:

答案 0 :(得分:0)

通常,源树看起来像这样:

src/
  main/
    java/
      com/
        ...
    resources/
      remoteUnitsIdsInOldServer.txt

并且,使用标准的Maven / Gradle功能,会产生这样的JAR:

<JAR_ROOT>/
  com/
    ...
  remoteUnitsIdsInOldServer.txt

您列出的代码应该适用于这种情况。但是,你提到要查看你的JAR&#34;内部课程&#34;。我不认为会有一个&#34;类&#34; JAR中的文件夹。

祝你好运。

答案 1 :(得分:0)

这取决于您的要求..

案例1:

考虑到您需要从资源访问文本文件。您只需使用apache IOUtils和java ClassLoader

Snippet(注意:IOUtils包 - &gt; org.apache.commons.io.IOUtils)

    String result = "";

    ClassLoader classLoader = getClass().getClassLoader();
    try {
        result = IOUtils.toString(classLoader.getResourceAsStream("fileName"));
    } catch (IOException e) {
        e.printStackTrace();
    }

经典方式:

StringBuilder result = new StringBuilder("");

//Get file from resources folder

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());

try (Scanner scanner = new Scanner(file)) {

    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        result.append(line).append("\n");
    }

    scanner.close();

} catch (IOException e) {
    e.printStackTrace();
}

案例2:

考虑到您需要从xml,properties文件等资源访问属性。 它太简单了,只需使用spring注释@ImportResource({ "classpath:application-properties.xml", "classpath:context.properties" }) 希望对你有所帮助。