我在我的CacheInitializer
中有这个代码,它实现了ServletContextListener
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
File file = new File(classLoader.getResource("synonyms.txt").getFile());
if (file != null && file.exists()) {
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String leftHand = line.split("=>")[0];
String rightHand = line.split("=>")[1];
for (String s : leftHand.split(",")) {
if (s.equals(""))
continue;
synonymsLookupMap.put(s.trim(), rightHand.trim());
}
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
throw new RuntimeException("Synonyms file not found");
}
sysnonyms.txt
文件位于资源文件夹中。当我尝试在本地运行此代码(Mac OSX)时,它运行得非常好。但是当我在我的Amazon Linux EC2机器上部署相同的战争时,没有内容被读取。我尝试了远程调试,代码永远不会进入while循环。也没有抛出异常。它找到该文件但行为就像它是空的,并且没有要读取的行。我尝试在服务器上通过vi创建synonyms.txt,然后使用它来查看它是否是文件格式问题。它也没用。
知道什么是问题吗?
答案 0 :(得分:1)
资源不是文件。资源API可以为您提供URL或资源的InputStream。这就是你所需要的。只需直接从输入流构建扫描仪。通过File转移是多余的,毫无意义,无法正常工作。