Я потратил часы и часы на поиск ответа, и я просто не могу понять это, я пытаюсь скопировать папку ресурсов, содержащую все изображения и файлы данных для моей игры я работаю из бегущей банки и в E:/Program Files/mtd/Она отлично работает, когда я запускаю ее из затмения, но когда я экспортирую банку и ее пытаюсь, я получаю NoSuchFileExceptionКак скопировать папку ресурсов из jar в файлы программы
`JAR
Installing...
file:///C:/Users/Cam/Desktop/mtd.jar/resources to file:///E:/Program%20Files/mtd
/resources
java.nio.file.NoSuchFileException: C:\Users\Cam\Desktop\mtd.jar\resources
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Sou
rce)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Sou
rce)
at sun.nio.fs.WindowsFileSystemProvider.readAttributes(Unknown Source)
at java.nio.file.Files.readAttributes(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
at me.Zacx.mtd.main.Game.<init>(Game.java:94)
at me.Zacx.mtd.main.Game.main(Game.java:301)`
Это код, я использую:
if (!pfFolder.exists()) {
pfFolder.mkdir();
try {
URL url = getClass().getResource("/resources/");
URI uri = null;
if (url.getProtocol().equals("jar")) {
System.out.println("JAR");
JarURLConnection connect = (JarURLConnection) url.openConnection();
uri = new URI(connect.getJarFileURL().toURI().toString() + "/resources/");
} else if (url.getProtocol().equals("file")) {
System.out.println("FILE");
uri = url.toURI();
}
final Path src = Paths.get(uri);
final Path tar = Paths.get(System.getenv("ProgramFiles") + "/mtd/resources/");
System.out.println("Installing...");
System.out.println(src.toUri() + " to " + tar.toUri());
Files.walkFileTree(src, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
return copy(file);
}
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
return copy(dir);
}
private FileVisitResult copy(Path fileOrDir) throws IOException {
System.out.println("Copying " + fileOrDir.toUri() + " to " + tar.resolve(src.relativize(fileOrDir)).toUri());
Files.copy(fileOrDir, tar.resolve(src.relativize(fileOrDir)));
return FileVisitResult.CONTINUE;
}
});
System.out.println("Done!");
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
'% 20' является HTML-спаслось пространство , это то, что дает вам проблемы (вероятно, происходит из кодировки URL через '.toUri()')? Где именно строка 94? '(Game.java:94)' Is 'C: \ Users \ Cam \ Desktop \ mtd.jar \ resources' папка или файл? –
@MaximilianGerhardt using .replaceAll (...), чтобы удалить% 20s, не исправляет его, Game.java:94 - Files.walkFileTree (src, new SimpleFileVisitor() {и ресурсы - это папка, содержащая все изображения и т. д. для моей игры. Извините за то, что не в том числе:/ –
Zacx
Итак, не является ли Java правильным, говоря «java.nio.file.NoSuchFileException: C: \ Users \ Cam \ Desktop \ mtd.jar \ resources', потому что' \ resources' действительно папка и никакой каталог? Должна быть некоторая ошибка в способе, по которому вы ходите по дереву файлов. Может быть, попробуйте создать сначала создать папку? Функция 'copy()', похоже, не называется , или иначе мы увидим строку «Копирование .. в ...» * ИЛИ *, это сбой в этой точной строке 'System.out.println()' в '.resolve()' или 'relativize()' добавьте еще вывод отладки, чтобы убедиться. –