C'est une note technique car j'ai eu l'opportunité de mettre en place un processus dont je ne sais pas quelle est la demande dans le monde: obtenir une liste du contenu d'un fichier zip et sa taille non compressée.
Tout d'abord, comme préparation préliminaire, préparez le fichier zip selon la procédure suivante.
mkdir -p dir0/dir1/dir2
echo -n 1 > dir0/file1
echo -n 22 > dir0/dir1/file2
echo -n 333 > dir0/dir1/dir2/file3
cd dir0
zip -r ../zipfile.zip *
cd ..
Si vous exécutez les commandes ci-dessus dans l'ordre depuis le haut, un fichier zip appelé zipfile.zip sera créé. Pour vérifier le contenu, décompressez zipfile.zip selon la procédure suivante et enregistrez le fichier stocké et la liste des tailles avant la compression.
unzip -d dst zipfile.zip
cd dst
find . -type f -exec stat -c %n=%sB {} \;
# ./dir1/dir2/file3=3B
# ./dir1/file2=2B
# ./file1=1B
La préparation est maintenant terminée. Le code Java du sujet est le suivant.
Main.java
import java.io.IOException;
import java.util.zip.ZipFile;
public class Main {
public static void main(String[] args) {
try (var zipfile = new ZipFile("zipfile.zip")) {
var entries = zipfile.entries();
while (entries.hasMoreElements()) {
var entry = entries.nextElement();
if (entry.isDirectory()) {
continue;
}
System.out.printf("%s=%dB%n", entry.getName(), entry.getSize());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Si vous faites cela, vous obtiendrez une sortie similaire à ce qui suit: Si vous le comparez, vous pouvez voir qu'il correspond au contenu de la préparation (`・ ω ・ ´) Shakin
dir1/dir2/file3=3B
dir1/file2=2B
file1=1B
Recommended Posts