在spring-boot java类中以编程方式获取资源目录路径的问题在使用Java -jar运行jar时抛出错误

时间:2015-10-08 21:32:35

标签: java spring-mvc spring-boot

在spring boot mvc应用程序中,我正在尝试生成文件并将其存储在资源目录下的子文件夹中,以便我可以提供下载链接,以便从UI下载。 我能够使用this.getClass()。getClassLoader()。getResource(“”)来获取资源目录路径,如果使用 mvn clean install spring-boot:run 但是如果使用java -jar **。jar运行jar文件则会抛出错误。

即使我决定使用外部Tomcat而不使用任何java类代码更改,我如何能够同时处理这些事情以及它应该工作。 顺便说一句,我试图找出服务层中的路径,它的纯java类不能看到servlet。

2 个答案:

答案 0 :(得分:0)

请记住,编译和打包应用程序的结果是.jar或.war文件。

应用程序服务器通常会扩展.war文件,但不是必须这样做。

因此,您应该假设在运行时没有“资源目录”。

安全的做法是自己创建一个目录(不是progamatically),并将该目录的路径放在一个环境变量中,供应用程序读取。

答案 1 :(得分:0)

我已经为Spring-Boot和Java 8提供了一个可行的解决方案(IDE /本地maven和java -jar)版本:

  final String extension = ".txt";
  final String resourceLocation = "/cool/folder/**/*" + extension ;

  final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  final List<String> txtResourceList = new ArrayList<>();
  final Resource[] resources = resolver.getResources( resourceLocation );

  for ( Resource resource : resources ) {
        final String txtFileContent = new BufferedReader(
              new InputStreamReader( resource.getInputStream(),
        StandardCharsets.UTF_8 ) )
        .lines().collect( Collectors.joining( " " ) );
        txtResourceList .add( txtFileContent );
  }

如果有什么不清楚,请告诉我。