我知道我可以从src/test/resources加载一个文件:
getClass().getResource("somefile").getFile()
但是我怎么能得到src/test/resources目录的完整路径,即我不想加载一个文件,我只想知道目录的路径?
我知道我可以从src/test/resources加载一个文件:
getClass().getResource("somefile").getFile()
但是我怎么能得到src/test/resources目录的完整路径,即我不想加载一个文件,我只想知道目录的路径?
当前回答
如果这是一个spring项目,我们可以使用下面的代码从src/test/resource文件夹中获取文件。
File file = ResourceUtils.getFile(this.getClass().getResource("/some_file.txt"));
其他回答
src/test/resources中的所有内容都复制到target/test-classes文件夹中。所以在maven构建期间,要从测试资源中获取文件,你必须从test-classes文件夹中加载它,就像这样:
Paths.get(
getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
).resolve(
Paths.get("somefile")
).toFile()
分解:
getClass(). getprotectiondomain (). getcodesource (). getlocation (). touri() -给你目标/测试类的URI。 resolve(Paths.get("somefile")) -将somefile解析到target/test-classes文件夹。
原来的答案是这样的
如果这是一个spring项目,我们可以使用下面的代码从src/test/resource文件夹中获取文件。
File file = ResourceUtils.getFile(this.getClass().getResource("/some_file.txt"));
尝试使用ClassLoader类:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("somefile").getFile());
System.out.println(file.getAbsolutePath());
ClassLoader负责装入类。每个类都有一个对ClassLoader的引用。这段代码从资源目录返回一个File。对其调用getAbsolutePath()将返回其绝对路径。
Javadoc for ClassLoader: http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html
我将简单地使用Java 7中的Path
Path resourceDirectory = Paths.get("src","test","resources");
干净利落!
我使用的最简单和干净的解决方案,假设测试类的名称是TestQuery1,并且在您的测试文件夹中有一个资源目录,如下所示:
├── java
│ └── TestQuery1.java
└── resources
└── TestQuery1
├── query.json
└── query.rq
要获得TestQuery1的URI,请执行以下操作:
URL currentTestResourceFolder = getClass().getResource("/"+getClass().getSimpleName());
要获取文件TestQuery1的URI,请执行以下操作:
File exampleDir = new File(currentTestResourceFolder.toURI());
URI queryJSONFileURI = exampleDir.toURI().resolve("query.json");