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
?
- Comment créer une chaîne Java à partir du contenu d'un fichier ? (5 réponses )
- Quoi de plus simple pour lire un fichier en chaîne ? (5 réponses )
Réponses
Trop de publicités?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).
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.
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 "";
}
}