不确定这是怎么回事。我重读了getResourceAsStream,它总是返回null。
InputStream source = this.getClass().getResourceAsStream("test.xml");
Finder中的test.java旁边(使用OS X和Eclipse)是test.xml
我可以在TextWrangler中打开它,并将其视为已存在的数据。
这是Junit测试,如果它有任何区别。我去查看我们系统上现有的Junit测试,并且我以与工作示例完全相同的方式使用它(如文件所在的位置和代码本身)。
可以防止我假设getClass()返回正确的路径会有什么小的差别?
谢谢!
答案 0 :(得分:27)
它没有在类路径上找到资源。如果您正在使用junit和maven,请通过在<include>
部分添加<testResource>
文件指令来确保将资源复制到目标/测试类
您还可以使用
在文件系统中找到课程的位置this.getClass().getResource(".")
并检查资源是否存在
答案 1 :(得分:22)
getResourceAsStream()
正在使用CLASSPATH,因此它将从加载类,而不是源文件。
我怀疑您需要将XML复制到与.class文件相同的目录。
答案 2 :(得分:12)
我总是遇到这种方法的问题。这里有2个链接,可能很有用:
我总是尝试在开头添加“/”或“./”。
根据我的经验,最好的方法是使用FileInputStream。只有一件事要记住(当使用带有Eclipse的FileInputStream时),使用默认设置,您的工作目录将设置为项目根目录。您始终可以使用this piece of code检查当前目录的位置(以及所需的相对路径)。
答案 3 :(得分:11)
如果您使用的是Maven,请将此部分添加到pom.xml
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
您的test.xml
和其他资源文件必须位于src/test/resources
答案 4 :(得分:8)
假设test.xml
位于test
根源文件夹的正下方,请执行以下操作: -
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
答案 5 :(得分:1)
尝试MyClass.getResourceAsStream()。
还尝试将test.xml放在类路径中。例如,在Eclipse Web项目中将text.xml放在webcontent / WEB-INF / classes
中答案 6 :(得分:1)
来自Java API:
从用于加载类的搜索路径中查找指定名称的资源。此方法通过系统类加载器
定位资源所以语法例如是: ClassLoader.getSystemResource( “的test.xml”)的toString();
像魅力一样!
答案 7 :(得分:1)
我花了很多时间在这个问题上,它错过了以下配置: 右键单击eclipse项目并选择属性 - &gt; Java构建路径 - &gt;来源并修改包含行和添加* .properties (* .fileExtension)
答案 8 :(得分:0)
我有一个Spring类的问题。 System.class.getResourceAsStream(...)
在单元测试中工作但在Tomcat中没有工作,Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
在Tomcat中工作但在单元测试中没有工作。
我不知不觉地去了:
ClassUtils.getDefaultClassLoader()
.getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))
我还发现,一旦我这样做,我做不需要让路径以斜线开头。
答案 9 :(得分:0)
您需要将资源文件的副本放入测试资源,在我的示例中,它是字体文件:
然后从你的jUnit测试中调用next:
public static InputStream getFontAsStream() throws IOException {
return Thread.currentThread().getContextClassLoader()
.getResourceAsStream("fonts/" + "FreeSans.ttf");
}
答案 10 :(得分:0)
将test.xml放入src / main / resources(或src / test / resources)中。
File file = ResourceUtils.getFile("classpath:test.xml");
String test = new String(Files.readAllBytes(file.toPath()));
答案 11 :(得分:0)
尝试使用类加载器
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
答案 12 :(得分:-1)
将您拥有资源文件的文件夹添加到eclipse的源文件夹中。然后该文件应自动放入bin目录。