Java 在类路径中访问spring启动中的文件夹

Java 在类路径中访问spring启动中的文件夹,java,spring,spring-boot,Java,Spring,Spring Boot,我试图访问在Spring引导应用程序的类路径中创建的文件夹。下面是代码片段: ClassLoader classLoader = ClassUtils.getDefaultClassLoader(); URL url = classLoader.getResource("converters"); LOGGER.debug("**************** url: " + url); File file = new File(url.toURI());

我试图访问在Spring引导应用程序的类路径中创建的文件夹。下面是代码片段:

ClassLoader classLoader = ClassUtils.getDefaultClassLoader();
URL url = classLoader.getResource("converters");
LOGGER.debug("**************** url: " + url);
File file = new File(url.toURI());
        
Path path = Paths.get(file.getAbsolutePath());
Arrays.stream(path.toFile().listFiles()).forEach(f -> LOGGER.debug("*******files: " + f.getName()));
if (!path.toFile().isDirectory()) {
   throw new IllegalArgumentException(ErrorCode.INVALID_MAPPERS_DIRECTORY.formatMessage(path));
}
上面的代码在Intellij中运行时没有任何问题,我得到的url如下:

文件:/C:/Users/user1/projects/my service/test/build/resources/main/converter

当我在应用程序rpm中的Linux上运行它时,我得到以下url值:

jar:file:/opt/home/libexec/my-service-2.0.0-SNAPSHOT.jar/BOOT-INF/lib/my-service-api-2.0.0-SNAPSHOT.jar/转换器


为什么会有不同的行为?

不同之处在于包装。 IDE不会打包应用程序来运行它,它只是使用文件系统,因为这样速度更快。
打包应用程序并部署ide可以从文件系统访问的所有资源时,现在都打包在spring boot fat jar文件中。在您的情况下,该文件位于打包在fat jar中的
my-service-api-2.0.0-SNAPSHOT.jar
中。

问题

我需要能够对用户可能在Spring Boot应用程序的类路径中创建的文件夹进行引用

解决方案

以下几点对我很有用:

mapperFilesFolder = resolver.getResources("classpath*:" + mappersLocation + "/.");
Path path = Paths.get(mappersFolder[0].getURI());

不能假设类路径包含文件夹或
文件
s,句点。你必须使用另一种策略;这取决于手头的具体任务。感谢@Hopey One的回答,这是有意义的,但是有没有办法在文件系统的类路径中引用文件夹或目录?为什么需要将类路径包含在这个逻辑中?在我看来,当文件系统上有一个目录,用户可以在其中处理文件,应用程序可以从中读取。。。完成。@Gimby,我们需要能够监视用户对文件所做的任何更改,如果发生此类更改,我们需要在不启动应用程序的情况下进行验证和重新加载。用户可以为文件指定任何位置,但如果未指定,则默认为类路径中存在的文件夹。