Puisque j'ai eu l'occasion de décompresser le fichier zip avec Java, ce sera un mémo technique à ce moment-là (´ ・ ω ・ ・) Tout d'abord, les trois fichiers à stocker dans le zip (ʻa.txt,
dir1 / b" Créez .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
Vous pouvez vérifier le contenu créé avec la commande suivante.
find . -name "*.txt" | while read path; do
echo "---> ${path} <---"
cat ${path}
done
---> ./a.txt <---
AAAAAAAAAA
---> ./dir1/b.txt <---
BBBBBBBBBB
---> ./dir1/dir2/c.txt <---
CCCCCCCCCC
Maintenant que vous avez confirmé que les trois fichiers ont été créés comme prévu, compressez-les sous forme de fichier text.zip
.
$ zip "text.zip" $(find . -name "*.txt")
adding: a.txt (deflated 45%)
adding: dir1/b.txt (deflated 45%)
adding: dir1/dir2/c.txt (deflated 45%)
Enfin, confirmons que le fichier text.zip
a été créé avec succès.
$ 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
L'introduction a été allongée, mais si vous voulez décompresser le fichier text.zip
dans le répertoire text
, le code Java pour le faire est:
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);
}
}
}
}
Lorsque vous exécutez ce code Java, vous devriez voir un journal similaire au suivant dans la sortie standard dès que text.zip
est décompressé dans le répertoire text
.
inflating: text\a.txt
inflating: text\dir1\b.txt
inflating: text\dir1\dir2\c.txt
Le fichier text.zip
a-t-il été vraiment décompressé dans le répertoire text
? Vous pouvez vérifier cela avec une commande comme celle-ci.
$ 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