我有一个具有典型项目结构的maven项目。在项目的基础上,我有一个目录名称 res ,它有一些资源(> 500 MB)。 我正在尝试使用
this.class().getClassLoader().getResourceAsStream("res/xxx")
此代码片段从该文件夹中读取,但它返回一个空资源流。 我在下面有一些解决方法,但由于下面解释的原因,这些都不可接受。
有什么方法可以从项目基目录中读取 res 文件夹吗? pom.xml 文件中是否有一些可以帮助我的设置?
答案 0 :(得分:4)
使用this.class().getClassLoader().getResourceAsStream("/res/xxx")
然后您将从类路径的根读取,而不管Windows或Linux中的实际文件/文件夹位置。这实际上是读取文件最安全的方法之一,尤其是当您不知道应用程序最终将如何部署时。
这意味着您的类路径必须包含res的父级,并且在部署应用程序时必须复制res / /
否则,如果您想使用相对路径,请尝试使用此代码段(取自此SO answer):
String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");
答案 1 :(得分:1)
如果您使用this.class().getClassLoader().getResourceAsStream("/res/xxx")
,它将尝试从类路径加载资源。如果您不希望这样做,则需要指定绝对路径。
如果您不希望将资源内置到JAR中,我建议在src/main/resources
目录下使用其中包含文件的不同maven项目。这将创建一个包含文件的jar文件,大小约为500MB。
在此之后,您可以在包含应用程序代码的项目中包含此项目的依赖项。然后,这将能够使用getResourceAsStream(...)
从jar文件中引用它。
如果您不希望随应用程序一起提供此大型jar文件,请确保使用<scope>provided</scope>
标记依赖项。
您需要将文件位置作为主方法中的参数,然后使用new File("C:\\path\\to\\your\\file.txt")
,然后使用FileReader
将其读入。