We're developing a webapp and we have some files to read from a resources
directory. During preliminary development and testing, we'd like to be able to read directly from the file in the resources directory. On the other hand, we want to read the resource file from a jar file when the webapp is deployed.
I've read other questions that indicate how to read files from jars. The essence of the idea is to get a BufferedReader and to read from that.
I've written the following code that allows me to create a BufferedReader from either the file system or a jar file, passing in the file name, e.g. myResource.txt
, and the ClassLoader, e.g. getClass().getClassLoader()
. It seems like it could be made better and/or simpler. Please help.
public static BufferedReader getBufferedReader(String fileToFind,
ClassLoader classLoader) {
BufferedReader bufferedReader = null;
// Try to find file in file system
final URL resource =
classLoader.getResource(fileToFind);
if (resource != null) {
String fileName = resource.getFile();
if (fileName != null) {
try {
final FileReader fileReader = new FileReader(fileName);
bufferedReader = new BufferedReader(fileReader);
}
catch (FileNotFoundException e) {} // no problem, move on
}
}
if (bufferedReader == null) {
// Try to find file in jar file
InputStream inputStream =
classLoader.getResourceAsStream(fileToFind);
final InputStreamReader streamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(streamReader);
}
return bufferedReader;
}