Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从project base目录读取文件夹_Java_Maven_Relative Path - Fatal编程技术网

Java从project base目录读取文件夹

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时,它也会被清除。因此,这种方

我有一个典型项目结构的maven项目。在项目的基础上,我有一个目录名res,其中包含一些资源(>500MB)。 我正在尝试使用

this.class().getClassLoader().getResourceAsStream(“res/xxx”)

此代码片段无法从该文件夹读取,但它返回空资源流。 我在下面有一些变通方法,但由于下面解释的原因,这些都是不可接受的

  • 我可以将文件夹移动到{base}/target/classes,它将被读取,但当我执行mvn clean时,它也会被清除。因此,这种方法不起作用。出于某种原因,将路径指定为。/../res/xxx也不起作用
  • 我可以将文件夹移动到{base}/src/resources,但随后它将被复制到target/classes和jar。因此,这也是不可接受的
  • 尽管我愿意尝试其他一些java API,但我可能只需要使用类加载器机制,因为有一些外部库组件也在尝试使用类似的方法访问res文件夹 是否有某种方法可以从项目基本目录中读取res文件夹?在pom.xml文件中是否有一些设置可以帮助我实现这一点?

    使用
    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");