我有一个Web应用程序,我的要求是读取一些文件并对其进行处理,并在应用程序启动时将文件内容保存在数据库中。
class MyUtil{
/**
*Read the files
*/
public static void readFiles(){
File file = new File(ClassLoader.getSystemClassLoader().getResource("MyFile").toURI()); //NullPointerException
// ClassLoader.getSystemClassLoader().getResource("MyFile") is giving null in servlet.init() method.
if (file.isDirectory()) {
//Read all the files and persist.
}
}
}
类路径中提供了 MyFile
folder / dir 。在JUnit测试用例中调用MyUtil.readFiles()
时,它可以正常工作。但是当在servelet.init()
方法ClassLoader.getSystemClassLoader().getResource("MyFile")
中调用它时,会给出null。
答案 0 :(得分:3)
您可以使用getClass().getClassLoader().getResource(...)
替代ClassLoader.getSystemClassLoader().getResource(...)
替代方案有效,因为在网络服务器中有多个类加载器,并且您无法确定哪个加载了您的类。我猜ClassLoader
类在使用默认的java类加载器之前加载,然后MyUtil
类加载了与webserver不同的类加载器,因此导致了不同的类路径。