Java 文件路径-相对路径

Java 文件路径-相对路径,java,file,jmeter,Java,File,Jmeter,我有一个maven项目,作为我需求的一部分,我需要从测试类中读取一个文件,该文件位于测试文件夹中的一个目录中 我的项目层次结构如下 src --test ---java --org --sample --- MyTestClass.java ---jmeter ---load_data.csv 在MyTestClass.

我有一个maven项目,作为我需求的一部分,我需要从测试类中读取一个文件,该文件位于测试文件夹中的一个目录中

我的项目层次结构如下

src
     --test
        ---java
             --org
                 --sample
                      --- MyTestClass.java
        ---jmeter
               ---load_data.csv
在MyTestClass.java中,我需要读取load_data.csv。到目前为止,我对File和Path的测试还没有结果

file.exists()总是给我false…我怎样才能找到文件并读取它


关于

src/test/resources/
中添加您的
load_data.csv
并相应地查询

假设您的项目的根是
src
的父级,那么您的路径应该是:

Paths.get("src", "test", "jmeter", "load_data.csv")

问题有两个方面。如何从Maven访问文件,其次如何从类访问文件。我假设您的maven构建失败了,因为由于缺少文件,它没有通过测试

快速和肮脏的方式:

输入完整路径。根据操作系统的不同,导航到终端中的文件并键入(OSX和nix):“pwd”,然后在新文件中复制并粘贴完整路径() Windows:回显%cd% 或

更好的方法: 您可能应该在参考资料中添加该文件。按照惯例,您希望将资源放在该文件夹中。它使得在类内部访问变得很容易,也就是class.getResource(“somefile.txt”),而无需担心相对路径。 当您分发程序时,它也会被添加到您的jar中。 文件结构: 约定src->main->resources->load_data.csv

在您的例子中,src->test->resources->load_data.csv

现在,如何从maven引用资源。在下面的构建过程中添加资源的困难方法来自Maven文档


复制资源
验证
复制资源
${basedir}/目标/额外资源
src/非打包资源
符合事实的

如果不希望testResources成为主发行版的一部分,则需要添加一个测试概要文件,并将其从主阶段/构建中排除。更多文档

尝试将以下代码添加到
MyTestClass
中,以便在运行测试时可以看到当前工作目录是什么:
System.out.println(“工作目录:”+path.get(“”.toabsolutionPath())然后您应该能够看到如何构建完整路径。通过在构建工具中将其指定为资源目录,将其添加到类路径中。然后像加载任何其他类路径资源一样加载它。为什么不将多个值传递给
路径。get()
?例如,
path.get(“src”、“test”、“jmeter”、“load_data.csv”)
或使用其中一种方法?使用这两种方法中的任何一种,您都不必担心分隔符。此外,您可能希望包括您假设项目的根目录是运行时的当前工作目录。
<executions>
      <execution>
        <id>copy-resources</id>
        <!-- here the phase you need -->
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
          <resources>          
            <resource>
              <directory>src/non-packaged-resources</directory>
              <filtering>true</filtering>
            </resource>
          </resources>              
        </configuration>            
      </execution>
    </executions>