una txt texto separado por modificar linea leer lectura especifica escribir como comas caracter archivos archivo java unit-testing

txt - ¿Cómo leer un recurso de archivo de texto en la prueba de la unidad Java?



leer y escribir archivos en java (8)

Tengo una prueba de unidad que necesita trabajar con el archivo XML ubicado en src/test/resources/abc.xml . ¿Cuál es la forma más sencilla de obtener el contenido del archivo en String ?


Asuma la codificación UTF8 en el archivo; de lo contrario, simplemente omita el argumento "UTF8" y usará el juego de caracteres predeterminado para el sistema operativo subyacente en cada caso.

Forma rápida en JSE 6 - ¡Biblioteca simple y sin terceros!

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

Manera rápida en JSE 7 (el futuro)

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

Sin embargo, ninguno de los dos tenía grandes archivos.


Con el uso de Google 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); } }

Ejemplo:

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


Directo al punto :

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


Esto es lo que solía obtener los archivos de texto con texto. Usé los recursos de IOUtils y guava de los comunes.

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


Finalmente encontré una buena solución, gracias a 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" ); } }

Funciona perfectamente. Archivo src/test/resources/com/example/abc.xml está cargado (estoy usando Maven).

Si reemplaza "abc.xml" con, digamos, "/foo/test.xml" , se cargará este recurso: src/test/resources/foo/test.xml

También puedes usar 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(); } }


Primero asegúrese de que abc.xml se esté copiando en su directorio de salida. Entonces deberías usar getResourceAsStream() :

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

Una vez que tienes InputStream, solo necesitas convertirlo en una cadena. Este recurso lo detalla: http://www.kodejava.org/examples/266.html . Sin embargo, extraeré el código relevante:

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


Puede usar una regla de Junit para crear esta carpeta temporal para su prueba:

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


Puedes intentar hacer:

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