197 votes

java.nio.file.Path pour une ressource classpath

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.

2voto

user1079877 Points 703

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

2voto

Real Coder Points 21

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

0voto

user3050291 Points 1

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)) {
            ....
        }
    }

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