getResourceAsStream()适用于Windows但不适用于Linux

时间:2015-09-22 08:48:09

标签: java maven classloader

我的项目中有以下课程:

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

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

1 个答案:

答案 0 :(得分:1)

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