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