Java NIO kopiowanie między różnymi systemami plików (zip/Linux)

0

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

0

Ja bym takie operacje zrobil na poziomie OSa a nie implementowal w ten sposób w Javie, bo nie bardzo ma to sens.

0

No dobra, ale co jesli przychodzi cos jako zip i program Javovy ma to wyekstraktować i coś tam wczytac z 4 róznych plików? Uzywać procesów (tzn np. odpalić "unzip" z Javy)?

0

Może coś zaczarować z PipedOutputStream / PipedInputStream, tak by nie walić tego na system plików, tylko przez takie pajpy.

edycja: Zrozumiałem, że celem nie jest ekstrakcja na system plików, tylko przetworzenie danych, które zostały dostarczone w zipach.

0

Nie, celem jest rozpakowanie Zipa i lepiej skorzystac tutaj chyba ZipInputStream jednak...

1 użytkowników online, w tym zalogowanych: 0, gości: 1