269 votes

Comment lire un fichier texte en Java de test de l'unité?

J'ai un test unitaire qui doit travailler avec un fichier XML situé dans src/test/resources/abc.xml. Quel est le moyen le plus facile juste pour obtenir le contenu du fichier dans String?

269voto

yegor256 Points 21737

J'ai finalement trouvé une solution élégante:

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

Fonctionne parfaitement. Fichier src/test/resources/com/example/abc.xml est chargé (je suis en utilisant Maven).

85voto

Glen Best Points 11455

Assumer l'encodage UTF8 dans le fichier - si non, il suffit de laisser le "UTF8" l'argument et de l'utilisation de la jeu de caractères par défaut pour le système d'exploitation dans chaque cas.

Moyen rapide dans la JSE 6 - Simple & pas de 3ème partie de la bibliothèque!

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),"UTF8").useDelimiter("\\Z").next();
  }
}

Moyen rapide dans la JSE 7 (l'avenir)

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

Ni pour les énormes fichiers.

16voto

Kirk Woll Points 34601

Assurez-vous d'abord qu' abc.xml est copié dans votre répertoire de sortie. Ensuite, vous devez utiliser getResourceAsStream():

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

Une fois que vous avez l'InputStream, vous avez juste besoin de le convertir en une chaîne de caractères. Cette ressource sorts: http://www.kodejava.org/examples/266.html. Cependant, je vais extrait de la corporation de code:

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

7voto

Guido Celada Points 87

Vous pouvez essayer de faire:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X