Исключение в потоке "main" java.nio.file.InvalidPathException: Illegal char <:> в индексе 2:
Мне нужно скопировать ресурс pathpath из одного пакета в другой.
Моя программа:
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
я получаю исключение:
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)
Как его решить?
Решение
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);
}
Этот код правильно копирует Movie.class
из пакета com/stackoverflow/main
в com/stackoverflow/json
.
Ответы
Ответ 1
проблема в том, что Paths.get()
не ожидает такого значения, которое генерируется с помощью uri.getPath()
.
Решение:
URI uri = ClassLoader.getSystemResource("com/stackoverflow/json").toURI();
String mainPath = Paths.get(uri).toString();
Path path = Paths.get(mainPath ,"Movie.class");
Ответ 2
У меня была та же проблема, и я получил исключение, заметил, что в имени файла есть пробел, поэтому мне пришлось его обрезать. После этого проблема решена.
Path filePath = Paths.get(dirPathStr, newFileName.trim());
Ответ 3
Попробуйте изменить /
с помощью //
. Это решит проблему.
"com/stackoverflow/main/Movie.class"
в "com//stackoverflow//main//Movie.class"
"com/stackoverflow/json"
в "com//stackoverflow//json"
и так далее.
Ответ 4
У меня та же проблема, с которой я справлялся последние два дня, и, наконец, я понял, что Космос вызывает такую проблему, пытаясь решить
var fileName=YourFileName.trim();
Path filePath = Paths.get(dirPathStr, fileName);
Ответ 5
Попробуйте этот новый файл (getClass(). GetResource ("/images/pic3.png"). GetFile()). ToPath(); чтобы получить правильный путь. Я работал после нескольких часов, пытаясь выяснить, почему это не работает