首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将文本文件资源读入Java单元测试?

如何将文本文件资源读入Java单元测试?
EN

Stack Overflow用户
提问于 2010-10-08 22:07:45
回答 8查看 315.8K关注 0票数 243

我有一个单元测试,需要处理位于src/test/resources/abc.xml中的XML文件。将文件内容导入String的最简单方法是什么

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-11 19:50:17

最后,我找到了一个简洁的解决方案,多亏了Apache Commons

代码语言:javascript
复制
package com.example;
import org.apache.commons.io.IOUtils;
public class FooTest {
  @Test 
  public void shouldWork() throws Exception {
    String xml = IOUtils.toString(
      this.getClass().getResourceAsStream("abc.xml"),
      "UTF-8"
    );
  }
}

效果很好。文件src/test/resources/com/example/abc.xml已加载(我使用的是Maven)。

比方说,如果用"/foo/test.xml"替换"abc.xml",则将加载此资源:src/test/resources/foo/test.xml

您也可以使用Cactoos

代码语言:javascript
复制
package com.example;
import org.cactoos.io.ResourceOf;
import org.cactoos.io.TextOf;
public class FooTest {
  @Test 
  public void shouldWork() throws Exception {
    String xml = new TextOf(
      new ResourceOf("/com/example/abc.xml") // absolute path always!
    ).asString();
  }
}
票数 257
EN

Stack Overflow用户

发布于 2014-11-17 04:59:54

开门见山:

代码语言:javascript
复制
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());
票数 146
EN

Stack Overflow用户

发布于 2010-10-08 22:14:14

首先,确保将abc.xml复制到您的输出目录。那么你应该使用getResourceAsStream()

代码语言:javascript
复制
InputStream inputStream = 
    Thread.currentThread().getContextClassLoader().getResourceAsStream("test/resources/abc.xml");

一旦你有了InputStream,你只需要把它转换成一个字符串。这个参考资料详细说明了这一点:http://www.kodejava.org/examples/266.html。但是,我将摘录相关代码:

代码语言:javascript
复制
public String convertStreamToString(InputStream is) throws IOException {
    if (is != null) {
        Writer writer = new StringWriter();

        char[] buffer = new char[1024];
        try {
            Reader reader = new BufferedReader(
                    new InputStreamReader(is, "UTF-8"));
            int n;
            while ((n = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, n);
            }
        } finally {
            is.close();
        }
        return writer.toString();
    } else {        
        return "";
    }
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3891375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档