Java NullPointerException真的依赖于类的位置吗?

Java NullPointerException真的依赖于类的位置吗?,java,maven,javassist,Java,Maven,Javassist,我在Maven项目中有两个类,它们包含相同的代码(除了名称)。代码稍后将基于csv文件使用Javassist创建一个新类 第一个CsvParser放在src/main/java/CsvParser包中。第二个TestCsvParser放在src/test/java/csvParser包中。在这两个包中,放置了相同的文件assistant.csv 当我从main目录(CsvParser)运行一个时,我会得到一个java.lang.NullPointerException,但是当我运行TestCsv

我在Maven项目中有两个类,它们包含相同的代码(除了名称)。代码稍后将基于csv文件使用Javassist创建一个新类

第一个
CsvParser
放在
src/main/java/CsvParser
包中。第二个
TestCsvParser
放在
src/test/java/csvParser
包中。在这两个包中,放置了相同的文件
assistant.csv

当我从
main
目录(
CsvParser
)运行一个时,我会得到一个
java.lang.NullPointerException
,但是当我运行
TestCsvParser
时,放在
test
目录中,同样的代码工作正常

为什么会这样?(或者我只是看不到什么?;)

CsvParser

package csvParser;    

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

public class CsvParser {    

    public static void main(String[] args) throws IOException
    {
        createClass("/assistant.csv");
    }    

    /**
     * Create a class from a csv-file.
     */
    private static void createClass(String input) throws IOException {
        try(BufferedReader stream = new BufferedReader(new InputStreamReader(
                CsvParser.class.getResourceAsStream(input))))
        {
            // Create class based on csv-file.
        }
    }
}
TestCsvParser

package csvParser;    

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

public class TestCsvParser {    

    public static void main(String[] args) throws IOException
    {
        createClass("/assistant.csv");
    }    

    /**
     * Create a class from a csv-file.
     */
    private static void createClass(String input) throws IOException {
        try(BufferedReader stream = new BufferedReader(new InputStreamReader(
                TestCsvParser.class.getResourceAsStream(input))))
        {
            // Create class based on csv-file.
        }
    }
}
例外

Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at csvParser.CsvParser.createClass(CsvParser.java:19)
    at csvParser.CsvParser.main(CsvParser.java:11)
线程“main”java.lang.NullPointerException中的异常 在java.io.Reader上。(Reader.java:78) 位于java.io.InputStreamReader。(InputStreamReader.java:72) 位于csvParser.csvParser.createClass(csvParser.java:19) 位于csvParser.csvParser.main(csvParser.java:11) 我相信这个问题不是像
什么是NullPointerException
这样的问题的重复,因为:
NullPointerException
根据类的位置和引用的资源发生。所以更多的是关于目录结构和Maven
target
directory


谢谢你的时间

这取决于“/assistant.csv”文件的位置,如果找不到,您将获得NPE。路径将取决于您的类位置,因为您正在调用
CsvParser.class.getResourceAsStream..

最后我发现了错误。我在两个类(
CsvParser
TestCsvParser
)旁边添加了
assistant.csv
)。但在这两种情况下,该文件都不会添加到目标目录

它在
TestCsvParser
中工作的原因是在
./test/resource/
目录中增加了一个
assistant.csv
。事实上,我描述的两个条件忽略了这一事实,因此你无法完全重建我的错误。对此我很抱歉

要获得一个工作示例,
main
test
的资源文件必须放在
resource
文件夹中,而不是类旁边


特别感谢您的帮助。

也请显示例外情况检查助手.csv存在于您的maven Project资源文件夹中可能是重复的,可能是我误解了您的意思,但该文件位于两个目录中。两次都在教室旁边。那么NPE在哪里?我想这是在寻找输入资源。。。如果没有,你在哪一行看到NPE?@SoS要验证我说的话,试着打印这个
CsvParser.class.getResource(“/assistant.csv”)
您将知道它在哪里为null。
CsvParser.class.getResource(“/assistant.csv”)
返回
null
TestCsvParser.class.getResource(“/assistant.csv”)
返回
文件:/C:/Users/User/IdeaProjects/ComponentClassification/target/test classes/assistant.csv
。所以你是对的,但这并不能解释为什么它是这样的;)。这与此非常相似,因为当您运行非测试类时,您的assistant.csv可能不会被复制到目标/类。