我的Java代码如下:

InputStream in = getClass().getResourceAsStream("hello/say_hello.txt");
System.out.println ("InputStream = " + in + " and CWD is: " + System.getProperty("user.dir"));
IOUtils.copy(in, out);


我从~/work/my_project运行测试

我正在加载的文件的完整路径是~/work/my_project/hello/say_hello.txt

但是在运行上面的示例时,我得到:

InputStream = null and working directory is !~/work/my_project
java.lang.NullPointerException: null
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) ~[commons-io-2.4.jar:2.4]
    at myproject.addTestUser(Validation.java:157) ~[classes/:na]


现在,我的问题是:我该如何调试?
如何打印getResourceAsStream()扫描的路径以及如何向其中添加current-working-directory?

注意:上面是更大代码库的简化版本,在这里共享整个项目是不可行的。

最佳答案

当前工作目录与getResource(AsStream)函数无关。后者适用于您的类路径,它可能包括开始目录,但更可能是仅JAR。如果在您的IDE中运行,则src / main / resources / *通常位于类路径中。

09-26 10:59