我在单元测试中读取文本文件,并在资源文件夹中放置了一些输入文本文件。以下是目录结构。
- src - > com - > au - > myapp - > util - > MyFileReader
- 测试 - > com - > au - > myapp - > util - > MyFileReaderTest
- 测试 - > com - > au - > myapp - >资源 - > input.txt中
请注意,src和test属于同一层次结构。
public class MyFileReaderTest
{
ClassLoader classLoader = getClass().getClassLoader();
@Test
public void testReadInputFile() throws Exception
{
String file = classLoader.getResource("test/com/au/myapp/resources/input.txt").getFile();
List<String> result = InputFileReader.getInstance().readFile(file);
assertEquals("Size of the list should be 2", 2, result.size());
}
}
Classloader.getResource()
返回null。非常感谢您的帮助。
答案 0 :(得分:9)
类加载器使用类路径加载资源。您的类很可能位于包com.au.myapp.util
中。不在包test.com.au.myapp.util
中。
目录结构与包结构匹配。这意味着目录src和test都是源根。
由于您的文件位于源根目录下的com/au/myapp/resources
目录中,因此其包名为com.au.myapp.resources
。
所以你需要
classLoader.getResource("com/au/fitbits/resources/input.txt");
这是从类路径加载的资源。它现在可能是一个文件,因为您处于开发模式,并且直接从文件系统加载类。但是一旦投入生产,它们就不再从文件系统加载,而是从jar文件中加载。因此,您无法使用文件IO来读取此资源的内容。所以使用
classLoader.getResourceAsStream("com/au/fitbits/resources/input.txt")
并从此流中读取。