Je dois copier la ressource classpath d'un package à un autre.
Mon programme est:
public static void main(String[] args) throws IOException, URISyntaxException {
ClassLoader classLoader = CopyFileToDirectoryTest.class.getClassLoader();
InputStream in = classLoader.getResourceAsStream("com/stackoverflow/main/Movie.class");
URI uri = ClassLoader.getSystemResource("com/stackoverflow/json").toURI();
Path path = Paths.get(uri.getPath(),"Movie.class");
System.out.println(path);
long copy = Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);
System.out.println(copy);
}
À Files.copy
méthode j'obtiens une exception:
Exception in thread "main" Java.nio.file.InvalidPathException: Illegal char <:> at index 2: /D:/Programs/workspaceEE/HibernateDemo/target/classes/com/stackoverflow/json
at Sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.Java:182)
at Sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.Java:153)
at Sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.Java:77)
at Sun.nio.fs.WindowsPath.parse(WindowsPath.Java:94)
at Sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.Java:255)
at Java.nio.file.Paths.get(Paths.Java:84)
at com.stackoverflow.main.CopyFileToDirectoryTest.main(CopyFileToDirectoryTest.Java:34)
Comment le résoudre?
Solution
public static void main(String[] args) throws IOException, URISyntaxException {
ClassLoader classLoader = CopyFileToDirectoryTest.class.getClassLoader();
InputStream in = classLoader.getResourceAsStream("com//stackoverflow//main//Movie.class");
URI uri = ClassLoader.getSystemResource("com//stackoverflow//json").toURI();
String mainPath = Paths.get(uri).toString();
Path path = Paths.get(mainPath, "Movie.class");
System.out.println(path);
long copy = Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);
System.out.println(copy);
}
Ce code copie correctement Movie.class
du package com/stackoverflow/main
en com/stackoverflow/json
.
le problème est que Paths.get()
ne s'attend pas à ce type de valeur qui est généré à partir de uri.getPath()
.
Solution:
URI uri = ClassLoader.getSystemResource("com/stackoverflow/json").toURI();
String mainPath = Paths.get(uri).toString();
Path path = Paths.get(mainPath ,"Movie.class");
J'ai eu le même problème et j'ai obtenu l'exception, j'ai remarqué qu'il y avait un espace dans le nom de fichier, j'ai donc dû le couper. Après cela, le problème est résolu.
Path filePath = Paths.get(dirPathStr, newFileName.trim());
Essaye ça:
Path path = new File(getClass().getResource("/<path to the image in your build/classes folder>").getFile()).toPath();
pour obtenir le bon chemin. A travaillé pour moi après plusieurs heures à essayer de découvrir pourquoi je ne pouvais pas obtenir le fichier du pot. Cela fonctionne pour NetBeans 8.02
J'ai le même problème que j'éliminais depuis deux jours et finalement, je l'ai compris L'espace provoque un tel problème, essayez de le résoudre
var fileName=YourFileName.trim();
Path filePath = Paths.get(dirPathStr, fileName);