在spring引导应用程序中,我有application.yaml文件,其属性如下
files:
paths: /csvfiles/
在里面的时候 src/main/resource
,我们有一个名为csvfiles的文件夹,其中包含我要读取的csv文件列表。
我试图寻找相同的,但没有得到任何适当的方式来实现相同的。 getClass().getResourceAsStream("/files/paths")
cal仅用于获取特定文件,而不用于获取文件列表。
列出所有文件后,我希望按顺序读取它们
3条答案
按热度按时间byqmnocz1#
在spring中,一种解决方案是,可以从一个属于classpath的文件夹中注入resources数组
mwecs4sa2#
假设您的代码内置在一个可执行jar中,那么
src/main/resources
在jar里。您可以列出jar文件的内容,然后根据每个条目的路径,选择具有csvfiles
在小路上。要找出类来自哪个jar,请参见下面的内容。要列出jar文件的内容,请参见以下内容。
显然,这在本地运行时不起作用,因此需要一种替代方法。您可以用这个找到类文件的位置,然后导航到
csvfiles
相对于它的目录。2nc8po8w3#
是的
YourClass.class.getResourceAsStream
,不是getClass()
,如果你把东西分为子类,它就有可能被破坏。getresource机制根本不知道文件夹是什么,也不能给你一个列表。句号。类加载器是一种抽象,它们可以实现为读取jar文件、磁盘上的目录,也可以从网络加载、从数据库检索或动态生成,最关键的是,没有请列出文件夹内容选项,所以不管你在那里发现什么(还有一些库之类的),都是在这种情况下无法工作的黑客。
常见的解决方案是创建一个列出资源的文本文件。现在您不再依赖于不可用的“list files”操作:相反,您请求任何类路径条目上该文本文件的所有版本,然后只读取列出的每个文件。当应用于类时,这称为spi系统(服务提供者接口)。内置
java.*
它本身就是读取它们的能力,尽管它们是为类而不是文件设计的,所以我不确定spi系统是否直接应用于这里。不过,这个原则很管用。如果您想让它自动化,作为构建的一部分,您必须自动生成该文件。不知道你会怎么做,与Spring Boot,你可能要维护它的手。
举个例子:
捕获ioexception是公平的,特别是对于丢失的csvfiles,并将其重写为运行时异常—运行时不存在的文件是开发人员或devops错误,这些应该是错误或至少是运行时异常。