Witam, chciałbym się spytać czy istnieje jakas możliwośc skopowiania plików pomiędzy różnymi FileSystem?
Konkretnie chodzi mi o że mam system plików zip, i kopiuje pliki między nim a system linuksowym w bardzo słaby sposób. Najpierw przechodze po zipowym systemie plików i tworze docelowe katalogi w katalogu do którego mam zipa rozpakowac.
Nastepnie przechodze po plikach regularnych (teraz to implementuje) i tworze uri z path-ów zipowych, później z tego inputstreamy i kopiuje z tych inputstreamów do nowych plików w katalogu docelowym. Wiem że to jest mega słabe, ale nie wiem za bardzo jak moge zrobić inaczej zeby nie dostać ProviderMismatchException...
tutaj przykład z katalogami:
private static void copyDirectoriesFromZip(Path rootZipPath, Path targetDirectory) throws IOException {
Files.walk(rootZipPath)
.filter(Files::isDirectory)
.forEach(zipDir -> {
var subDir = Paths.get(targetDirectory.toString(), zipDir.toString());
try {
Files.createDirectories(subDir);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
Kopiowanie plików to już w ogóle hardore :D
private static void copyFilesFromZip(Path rootZipPath, Path targetDirectory) throws IOException {
Files.walk(rootZipPath)
.filter(Files::isRegularFile)
.forEach(zipFile -> {
var newFile = Paths.get(targetDirectory.toString(), zipFile.toString());
try (InputStream inputStream = zipFile.toUri().toURL().openStream()){
Files.copy(inputStream, newFile);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Shalom - może Ty cos podpowiesz? :)
INB4: tak wiem że są pewnie biblioteki od tego ale ja po prostu chciałem poćwiczyć Jave NIO