Java getResourceAsStream方法返回null InputStream

Java getResourceAsStream方法返回null InputStream,java,csv,testing,junit,Java,Csv,Testing,Junit,此类读取CSV文件 public class ReadCSVFile { private static final String SEMICOLON_DELIMITER = ";"; public Map<Integer,Company> listFromFile(String csvFile) throws IOException { BufferedReader br = null; br = new BufferedRe

此类读取CSV文件

public class ReadCSVFile {

    private static final String SEMICOLON_DELIMITER = ";";


    public Map<Integer,Company> listFromFile(String csvFile) throws IOException {

        BufferedReader br = null;

        br = new BufferedReader(new 
        InputStreamReader(ReadCSVFile.class.getResourceAsStream(csvFile)));

        Map<Integer,Company> companyHashMap = new HashMap();

        String line;

        br.readLine();

        while ((line = br.readLine()) != null) {

            int pos = line.indexOf(SEMICOLON_DELIMITER);
            String companyCode = line.substring(0,pos);
            String companyName = line.substring(pos +1, line.length());

            companyHashMap.put(Integer.parseInt(companyCode), new Company(Integer.parseInt(companyCode), companyName));
        }

        return companyHashMap;
    }
}
测试失败,我收到以下消息:

java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at app.ReadCSVFile.listFromFile(ReadCSVFile.java:21)
    at ReadCSVFileTest.shouldExtractCompanyFromCSV(ReadCSVFileTest.java:23)
而是行
(ReadCSVFileTest.java:23)

Map result=readCSVFile.listFromFile(“test_company_list.csv”);

请阅读
getResourceAsStream
文档

  • @参数名称所需资源的名称
    • @返回{@link java.io.InputStream}对象或{@code null}如果
    • 找不到具有此名称的资源

您确定发送的csvFile文件的路径正确吗?似乎您必须使用绝对名称

我使用以下说明修复了它:

        br = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(csvFile)));

按照此链接的解决方案:

我使用了IntelliJ复制的相对路径。这是一个奇怪的测试行为,因为2天前它工作正常,但我没有改变任何事情。
java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at app.ReadCSVFile.listFromFile(ReadCSVFile.java:21)
    at ReadCSVFileTest.shouldExtractCompanyFromCSV(ReadCSVFileTest.java:23)
br = new BufferedReader(new InputStreamReader(ReadCSVFile.class.getResourceAsStream(csvFile)));
 Map<Integer, Company> result = readCSVFile.listFromFile("test_company_list.csv");
        br = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(csvFile)));