2011-04-03 129 views

回答

53

也许,如果你在做单元测试时必须提供的文件,例如只是有用的 - 这将不会加载它从一个罐子的AFAIK。

URL url = Thread.currentThread().getContextClassLoader().getResource("mypackage/YourFile.csv"); 
File file = new File(url.getPath()); 
// where the file is in the classpath eg. <project>/src/test/resources/mypackage/YourFile.csv 
+2

我真正想要的是从getResourceAsStream提供路径到文件的抽象。否则新的File/getFile更直接 – simpatico 2011-04-04 21:03:52

+0

它也适用于“YourFile.csv”。 – simpatico 2011-07-15 19:18:14

+0

url对我而言是空的 – hithwen 2013-02-06 12:59:46

2
import org.apache.commons.io.FileUtils; 
... 
final File dic = FileUtils.getFile("src","test", "resources", "csvFile"); 

因为Apache Commons IO 2.1

19

您可以使用当前线程的类加载器访问测试资源:

InputStream stream = Thread.currentThread().getContextClassLoader() 
    .getResourceAsStream("YOURFILE.CSV"); 
+1

,但我希望有一个java.io.File的,而不是一个InputStream。 – simpatico 2011-04-03 12:54:05

+0

然后使用getClass()。getResource(“/ src/test/resources/YourFile.csv”); http://download.oracle.com/javase/6/docs/api/java/lang/Class.html – Sean 2011-04-03 13:43:14

+1

so,FileUtils.toFile(Thread.currentThread()。getClass()。getResource(“/ src/test /资源/ YourFile.csv“)); – simpatico 2011-04-04 07:10:21

9

与番石榴

import com.google.common.io.Resources; 
URL url = Resources.getResource("YourFile.csv"); 
+0

as @simpatico想要一个'java.io.File',这个答案可以继续:'File csvFile = new File(url.toURI());' – Abdull 2015-01-30 19:09:07

0

该解决方案无需LIB的。首先创建一个util类来访问资源文件。

public class TestUtil(Class classObj, String resourceName) throws IOException{ 
    URL resourceUrl = classObj.getResource(FileSystems.getDefault().getSeparator()+resourceName); 
    assertNotNull(resourceUrl); 
    return new File(resourceUrl.getFile()); 
} 

现在你只需要调用你的unitTest类和你的文件在资源文件夹中的名称的方法。

File cvsTestFile = TestUtil.GetDocFromResource(getClass(), "MyTestFile.cvs"); 
+0

我可以在哪里得到FileSystems类? – 2014-09-18 12:56:30

+1

@ToKra java.nio.file.FileSystems – rjdkolb 2016-06-14 13:35:04

0
// assuming a file src/test/resources/some-file.csv exists: 

import java.io.InputStream; 
// ... 
InputStream is = getClass().getClassLoader().getResourceAsStream("some-file.csv");