Da ich die Möglichkeit hatte, die Zip-Datei mit Java zu dekomprimieren, handelt es sich zu diesem Zeitpunkt um ein technisches Memo (´ ・ ω ・ `). Zunächst müssen die drei Dateien (a.txt, dir1 / b) wie folgt im Zip gespeichert werden Erstellen Sie .txt, dir1 / dir2 / c.txt).
mkdir -p dir1/dir2
touch a.txt dir1/b.txt dir1/dir2/c.txt
echo "AAAAAAAAAA" > a.txt
echo "BBBBBBBBBB" > dir1/b.txt
echo "CCCCCCCCCC" > dir1/dir2/c.txt
Sie können den erstellten Inhalt mit dem folgenden Befehl überprüfen.
find . -name "*.txt" | while read path; do
  echo "---> ${path} <---"
  cat ${path}
done
---> ./a.txt <---
AAAAAAAAAA
---> ./dir1/b.txt <---
BBBBBBBBBB
---> ./dir1/dir2/c.txt <---
CCCCCCCCCC
Nachdem Sie bestätigt haben, dass die drei Dateien wie erwartet erstellt wurden, komprimieren Sie sie als "text.zip" -Datei.
$ zip "text.zip" $(find . -name "*.txt")
  adding: a.txt (deflated 45%)
  adding: dir1/b.txt (deflated 45%)
  adding: dir1/dir2/c.txt (deflated 45%)
Lassen Sie uns abschließend bestätigen, dass die Datei "text.zip" erfolgreich erstellt wurde.
$ unzip -l text.zip
Archive:  text.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       11  2018-08-24 23:17   a.txt
       11  2018-08-24 23:17   dir1/b.txt
       11  2018-08-24 23:17   dir1/dir2/c.txt
---------                     -------
       33                     3 files
Die Einführung wurde verlängert, aber wenn Sie die Datei "text.zip" in das Verzeichnis "text" entpacken möchten, lautet der Java-Code dazu:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Main {
    public static void main(String[] args) throws IOException {
        var target = Paths.get("text");
        Files.createDirectories(target);
        
        var zipfile = Paths.get("text.zip");
        try (var in = new ZipInputStream(Files.newInputStream(zipfile))) {
            ZipEntry e;
            while ((e = in.getNextEntry()) != null) {
                var dst = Paths.get(target.toString(), e.getName());
                Files.createDirectories(dst.getParent());
                Files.write(dst, in.readAllBytes());
                System.out.printf("inflating: %s%n", dst);
            }
        }
    }
}
Wenn Sie diesen Java-Code ausführen, sollte in der Standardausgabe ein Protokoll ähnlich dem folgenden angezeigt werden, sobald text.zip in das Verzeichnis text entpackt wird.
inflating: text\a.txt
inflating: text\dir1\b.txt
inflating: text\dir1\dir2\c.txt
Wurde die Datei "text.zip" wirklich im Verzeichnis "text" entpackt? Sie können dies mit einem Befehl wie dem folgenden überprüfen.
$ find ./text -name "*.txt" | while read path; do
>   echo "---> ${path} <---"
>   cat ${path}
> done
---> ./text/a.txt <---
AAAAAAAAAA
---> ./text/dir1/b.txt <---
BBBBBBBBBB
---> ./text/dir1/dir2/c.txt <---
CCCCCCCCCC
        Recommended Posts