java - getResourceAsStream() 适用于 Windows,但不适用于 Linux

标签 java maven classloader

我的项目中有以下类(class):

package com.test.schedule.payloads;

import com.google.common.base.Charsets;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Loads payload from file
 */
public class FilePayload{
    private static final Logger LOGGER = Logger.getLogger(FilePayload.class);
    private final String filename;

    public FilePayload(String filename) {
        this.filename = filename;
    }

    public String getAsString() {
        try {
            return IOUtils.toString(new InputStreamReader(FilePayload.class.getResourceAsStream(filename), Charsets.UTF_8));
        } catch (IOException e) {
            LOGGER.error("Error while loading file: '" + filename +'\'', e);
            return "";
        }
    }
}

在我的项目(maven one)的资源目录中,我在以下路径中有文件:

com/test/schedule/payloads/schedule-payload.xml

当我在 Windows 上执行文件名等于“schedule-payload.xml”的 getAsString() 时,一切正常。但是,当在 Linux 服务器上执行相同的代码时,它会在 getResourceAsStream() 上返回 null。我不知道如何修复它,以便代码可以在 Windows 和 Linux 上运行。任何帮助将不胜感激。

最佳答案

检查此文件“com/test/schedule/payloads/schedule-payload.xml”路径上的所有内容是否都是小写,因为 Linux 路径区分大小写,而 Windows 路径不区分大小写。

关于java - getResourceAsStream() 适用于 Windows,但不适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32712447/

相关文章:

java - Spring MVC 项目的可选 redis session 存储

unit-testing - 有没有办法延迟 QUnit 测试套件的启动?

maven - 使用 JIB 插件 Docker 化多模块 Spring Boot 应用程序

java - 为什么我的程序的行为仅仅基于 Maven 依赖而改变?

Java EE 和 Java SE 类加载

java - 查找两个数组中时间窗口的最大数量。起始数组和结束数组

java - 从 linux 的服务器终端调用 Java 时的编码问题

java - 完成 future : Why we need stages at all?

java - Maven -- maven安装报错: Exception in thread "main" java. lang.UnsupportedClassVersionError

java - Java 9 中的类加载器层次结构