Existe-t-il une API pour obtenir une ressource de classpath (par exemple, ce que j'obtiendrais à partir de Class.getResource(String)
) comme un java.nio.file.Path
? Dans l'idéal, j'aimerais utiliser le nouveau système de Path
API avec des ressources classpath.
Réponses
Trop de publicités?Vous ne pouvez pas créer d'URI à partir de ressources situées dans le fichier jar. Vous pouvez simplement l'écrire dans le fichier temporaire et ensuite l'utiliser (java8) :
Path path = File.createTempFile("some", "address").toPath();
Files.copy(ClassLoader.getSystemResourceAsStream("/path/to/resource"), path, StandardCopyOption.REPLACE_EXISTING);
Lire un fichier depuis un dossier de ressources en utilisant NIO, en java8
public static String read(String fileName) {
Path path;
StringBuilder data = new StringBuilder();
Stream<String> lines = null;
try {
path = Paths.get(Thread.currentThread().getContextClassLoader().getResource(fileName).toURI());
lines = Files.lines(path);
} catch (URISyntaxException | IOException e) {
logger.error("Error in reading propertied file " + e);
throw new RuntimeException(e);
}
lines.forEach(line -> data.append(line));
lines.close();
return data.toString();
}
Vous devez définir le système de fichiers pour lire les ressources du fichier jar, comme indiqué dans le document suivant https://docs.oracle.com/javase/8/docs/technotes/guides/io/fsp/zipfilesystemprovider.html . J'ai réussi à lire les ressources du fichier jar avec les codes ci-dessous :
Map<String, Object> env = new HashMap<>();
try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
Path path = fs.getPath("/path/myResource");
try (Stream<String> lines = Files.lines(path)) {
....
}
}
- Réponses précédentes
- Plus de réponses