Je souhaite créer une chaîne à partir du contenu du fichier. Selon this answer je le fais de cette façon:Impossible d'obtenir le fichier de classpath (en utilisant NIO2)
private static String buildStringFromTemplate(String stringTemplatePath) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(stringTemplatePath));
return new String(encoded, "UTF-8");
}
(Si je comprends bien c'est un chemin d'une nouvelle API NiO2, qui est une partie de Java 7.) paramètre
de stringTemplatePath est nom du fichier ("template.html"). Je vérifie l'emplacement de ce fichier. Il est dans le classpath: ../classes/template.html
Après avoir appelé cette fonction que je reçois une exception:
java.nio.file.NoSuchFileException: template.html
J'envoyer peut-être paramètre de nom de fichier dans une mauvaise façon? J'ai essayé d'envoyer cette modification: "file: ///template.html" et "classpath: template.html", mais cela n'a pas aidé.
Aussi j'ai essayé ce code:
private static String buildStringFromTemplate(String stringTemplatePath) throws IOException {
File file = new File(stringTemplatePath);
String absolutePath = file.getAbsolutePath();
byte[] encoded = Files.readAllBytes(Paths.get(absolutePath));
return new String(encoded, "UTF-8");
}
J'ai appelé cette fonction, je me exception suivante:
java.nio.file.NoSuchFileException: /opt/repo/versions/8.0.9/temp/template.html
Ainsi, le fichier dans classpath parce nouveau fichier (stringTemplatePath) peut créer un fichier . Mais ce fichier a un chemin très étrange (/opt/repo/versions/8.0.9/temp/template.html). J'utilise Jelastic comme hébergeur (environnement: Java 8, Tomcat 8), si c'est le metter.
MISE À JOUR: TRAVAIL FINAL SOLUTION:
private static String buildStringFromTemplate(String stringTemplatePath) throws IOException {
InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream(stringTemplatePath);
return IOUtils.toString(inputStream, "UTF-8");
}
IOUtils est classe util de Apache Commons IO.
Note impotant:
Si j'invoque simplement .getResourceAsStream (...) de classe, fichier de ressources sera pas trouvé et méthode retourne null:
MyClass.class.getResourceAsStream(stringTemplatePath);
Donc, j'appelle .getClassLoader() avant d'appeler .getResourceAsStream (...) et il fonctionne parfaitement:
MyClass.class.getClassLoader().getResourceAsStream(stringTemplatePath);
N'utilisez pas Path (ou File, en 2015 n'utilisez aucun fichier) pour accéder aux ressources sur le système de fichiers! Il y a '.getResourceAsStream()' pour cela – fge
@fge Thx! Avec **. GetResourceAsStream() ** tout fonctionne bien! Voulez-vous poster votre réponse? – Sergey