java - Tomcat无法读取本地读取的文件

标签 java tomcat tomcat8

我的 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 机器上部署相同的 war 时,没有读取任何内容。我尝试了远程调试,但代码从未进入 while 循环。也不抛出异常。它找到了文件,但表现得好像它是空的,并且没有要读取的行。我尝试在服务器上通过 vi 创建 synonyms.txt,然后使用它来查看是否是文件格式问题。它也没有用。

知道一定是什么问题吗?

最佳答案

资源不是文件。资源 API 可以为您提供资源的 URL 或 InputStream。这就是你所需要的。只需直接从输入流构造 Scanner 即可。通过文件转移是多余的和毫无意义的,不会起作用。

关于java - Tomcat无法读取本地读取的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275714/

相关文章:

java - 使用 aspectJ 在 spring 中记录异常?

Tomcat 8 StaticMembershipInterceptor & uniqueId 属性

java - 方法参数的@Pattern注解

java - 将文件数组放入 java 类中

tomcat - 将 Tomcat8.5.14 添加到 NetBeans 8.0.2

apache - 在多个 URL 上使用相同的 tomcat 实例

spring - Tomcat:正在使用多个 log4j.xml 配置

ssl - Tomcat8 SSL 连接器

java - Tomcat 8.0.36 : WebappClassLoaderBase elusive nullpointerexception

java - 使用正则表达式解析 URL