gpt4 book ai didi

java - 如何调试 getResourceAsStream()?

转载 作者:行者123 更新时间:2023-11-30 08:34:00 26 4
gpt4 key购买 nike

我的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() 扫描的路径以及如何将当前工作目录添加到其中?

注意:以上是更大代码库的精简版本,无法在此处共享整个项目。

最佳答案

因为路径“hello/say_hello.txt”不是以“/”开头,Class.getResourceAsStream 会将其参数解释为相对 路径。相对于什么?相对于包含正在加载的类的包。

假设您有一个类 com.example.Foo,您在该类中调用了 getClass().getResourceAsStream("hello/say_hello.txt")。这将尝试加载名为“com/example/hello/say_hello.txt”的资源。它将在类路径中列出的任何目录下或在类路径中任何 JAR 中的此位置查找此文件。

如何将文件放入 JAR 中?正如@eckes 提到的,如果您将文件放在“src/main/resources/com/example/hello/say_hello.txt”的源代码树中,大多数流行的 IDE 和构建工具都会为您处理这个问题。你可以view the contents of the JAR (或将 JAR 重命名为文件扩展名为“.zip”并解压缩)以确保文件存在。

关于java - 如何调试 getResourceAsStream()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com