如何将文本文件资源读入Javaunit testing?

我有一个unit testing需要使用位于src/test/resources/abc.xml XML文件。 什么是最简单的方法来获取文件的内容到String

最后,我find了一个很好的解决scheme,感谢Apache Commons :

 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"replace"abc.xml" ,这个资源将被加载: src/test/resources/foo/test.xml

你也可以使用Cactoos :

 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(); } } 

假设在文件中使用UTF8编码 – 如果不是,则省略“UTF8”参数,并在每种情况下使用底层操作系统的默认字符集。

在JSE 6快速的方式 – 简单和没有第三方库!

 import java.io.File; public class FooTest { @Test public void readXMLToString() throws Exception { java.net.URL url = MyClass.class.getResource("test/resources/abc.xml"); //Z means: "The end of the input but for the final terminator, if any" String xml = new java.util.Scanner(new File(url.toURI()),"UTF8").useDelimiter("\\Z").next(); } } 

JSE 7中的快速方法(将来)

 public class FooTest { @Test public void readXMLToString() throws Exception { java.net.URL url = MyClass.class.getResource("test/resources/abc.xml"); java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI()); String xml = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8"); } 

尽pipe如此,它们也不是用于大文件。

正确的点:

 ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("file/test.xml").getFile()); 

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

 InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("test/resources/abc.xml"); 

一旦你有了InputStream,你只需要把它转换成一个string。 这个资源拼出来: http : //www.kodejava.org/examples/266.html 。 不过,我会摘录相关的代码:

 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 ""; } } 

你可以尝试做:

 String myResource = IOUtils.toString(this.getClass().getResourceAsStream("yourfile.xml")).replace("\n",""); 

这是我用来获取带有文本的文本文件。 我使用了commons的IOUtils和番石榴的资源。

 public static String getString(String path) throws IOException { try (InputStream stream = Resources.getResource(path).openStream()) { return IOUtils.toString(stream); } } 

随着谷歌Guava的使用:

 import com.google.common.base.Charsets; import com.google.common.io.Resources; public String readResource(final String fileName, Charset charset) throws Exception { try { return Resources.toString(Resources.getResource(fileName), charset); } catch (IOException e) { throw new IllegalArgumentException(e); } } 

例:

 String fixture = this.readResource("filename.txt", Charsets.UTF_8) 

您可以使用Junit规则为您的testing创build此临时文件夹:

@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); File file = temporaryFolder.newFile(".src/test/resources/abc.xml");