I read text file in my unit test and I placed some input text files in resources folder. Following is the directory structure.
- src -> com -> au -> myapp -> util -> MyFileReader
- test -> com -> au -> myapp -> util -> MyFileReaderTest
- test -> com -> au -> myapp -> resources-> input.txt
Note that src and test are in the same hierarchy.
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()
returns null. Really appreciate your assistance.
The classloader uses the classpath to load resources. Your classes are, most probably, in the package com.au.myapp.util
. Not in the package test.com.au.myapp.util
.
The directory structure matched the package structure. That means that the directories src and test are both source roots.
Since your file is in the directory com/au/myapp/resources
under a source root, its package is com.au.myapp.resources
.
So you need
classLoader.getResource("com/au/fitbits/resources/input.txt");
This is a resource, loaded from the classpath. It might be a file now, because you're in development mode, and classes are loaded directly from the file system. But once in production, they won't be loaded from the file system anymore, but from a jar file. So you can't use file IO to read the content of this resource. So use
classLoader.getResourceAsStream("com/au/fitbits/resources/input.txt")
and read from this stream.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With