Java从project base目录读取文件夹
我有一个典型项目结构的maven项目。在项目的基础上,我有一个目录名res,其中包含一些资源(>500MB)。 我正在尝试使用Java从project base目录读取文件夹,java,maven,relative-path,Java,Maven,Relative Path,我有一个典型项目结构的maven项目。在项目的基础上,我有一个目录名res,其中包含一些资源(>500MB)。 我正在尝试使用 this.class().getClassLoader().getResourceAsStream(“res/xxx”) 此代码片段无法从该文件夹读取,但它返回空资源流。 我在下面有一些变通方法,但由于下面解释的原因,这些都是不可接受的 我可以将文件夹移动到{base}/target/classes,它将被读取,但当我执行mvn clean时,它也会被清除。因此,这种方
this.class().getClassLoader().getResourceAsStream(“res/xxx”)
此代码片段无法从该文件夹读取,但它返回空资源流。
我在下面有一些变通方法,但由于下面解释的原因,这些都是不可接受的
this.class().getClassLoader().getResourceAsStream(“/res/xxx”)
,然后无论windows或Linux中的实际文件/文件夹位置如何,您都将从类路径的根目录进行读取。这实际上是读取文件最安全的方法之一,尤其是当您不知道应用程序最终将如何部署时
这意味着您的类路径必须包含res的父级,并且在部署应用程序时必须复制res/
否则,如果要使用相对路径,请尝试以下代码段(取自此SO):
如果使用
this.class().getClassLoader().getResourceAsStream(“/res/xxx”)
,它将尝试从类路径加载资源。如果不希望这样做,则需要指定一个绝对路径
类路径上的资源 如果您不想将资源内置到JAR中,我建议在
src/main/resources
目录下使用另一个maven项目,其中包含文件。这将创建一个jar文件,其中包含约500MB的文件
在此之后,您可以在包含应用程序代码的项目中包含对此项目的依赖项。然后可以使用getResourceAsStream(…)
从jar文件引用它
如果不希望这个大jar文件随应用程序一起提供,请确保使用提供的标记依赖项
来自绝对路径的文件
您需要将文件位置作为main方法中的一个参数,然后使用新文件(“C:\\path\\to\\your\\file.txt”)
然后使用文件读取器将其读入。在我看来,选项2)正是您想要的-因为您想从jar中读取资源,不是吗?2)是专业的方法;如果您想避免每次复制资源的开销,请将它们制作成自己的maven工件!Gyro,我对java比较陌生,尤其是maven。您能告诉我在哪里可以找到将资源制作成工件的说明吗?谢谢@kaustubh,这是我在下面回答的第一部分中概述的。谢谢!现在我将使用src/main/resources/文件夹。很高兴知道还有另一种使用依赖maven项目的方法。稍后我会尽快重新讨论这个问题。谢谢。我现在将文件夹移动到类路径。至少现在我知道我为什么要这么做了!
String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");