Czy jest jakiś przykładowy kod, jak częściowo rozpakować folder z ZIP do mojego pożądanego katalogu? Czytałem wszystkie pliki z folderu "FOLDER" do tablicy bajtów, jak mogę odtworzyć z jego struktury plików?Java ZIP - jak rozpakować folder?
Odpowiedz
Powinieneś dostać wszystkie wpisy z pliku zip:
Enumeration entries = zipFile.getEntries();
następnie itareting nad tym wyliczenie uzyskać ZipEntry
z niego, należy sprawdzić, czy jest to katalog, czy nie, i stworzyć dirctrory lub po prostu wyodrębnić respectivly pliku .
Oto kod, którego używam. Zmień BUFFER_SIZE dla swoich potrzeb.
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipUtils
{
private static final int BUFFER_SIZE = 4096;
private static void extractFile(ZipInputStream in, File outdir, String name) throws IOException
{
byte[] buffer = new byte[BUFFER_SIZE];
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(outdir,name)));
int count = -1;
while ((count = in.read(buffer)) != -1)
out.write(buffer, 0, count);
out.close();
}
private static void mkdirs(File outdir,String path)
{
File d = new File(outdir, path);
if(!d.exists())
d.mkdirs();
}
private static String dirpart(String name)
{
int s = name.lastIndexOf(File.separatorChar);
return s == -1 ? null : name.substring(0, s);
}
/***
* Extract zipfile to outdir with complete directory structure
* @param zipfile Input .zip file
* @param outdir Output directory
*/
public static void extract(File zipfile, File outdir)
{
try
{
ZipInputStream zin = new ZipInputStream(new FileInputStream(zipfile));
ZipEntry entry;
String name, dir;
while ((entry = zin.getNextEntry()) != null)
{
name = entry.getName();
if(entry.isDirectory())
{
mkdirs(outdir,name);
continue;
}
/* this part is necessary because file entry can come before
* directory entry where is file located
* i.e.:
* /foo/foo.txt
* /foo/
*/
dir = dirpart(name);
if(dir != null)
mkdirs(outdir,dir);
extractFile(zin, outdir, name);
}
zin.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Nie należy połykać wyjątku IOException. –
To działa dla mnie. Dzięki. –
Można to osiągnąć za pomocą biblioteki Ant Compress. Zachowa strukturę folderów.
Maven zależność: -
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-compress</artifactId>
<version>1.2</version>
</dependency>
Przykładowy kod: -
Unzip unzipper = new Unzip();
unzipper.setSrc(theZIPFile);
unzipper.setDest(theTargetFolder);
unzipper.execute();
Nie jestem pewien, co masz na myśli przez particaly? Masz na myśli zrobić to sam bez pomocy API?
W przypadku, gdy nie przeszkadza niektóre biblioteki opensource, nie jest cool API dla że tam nazywa zip4J
Jest łatwy w użyciu i myślę, że to dobre opinie o nim. Zobacz ten przykład:
String source = "folder/source.zip";
String destination = "folder/source/";
try {
ZipFile zipFile = new ZipFile(source);
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
Jeśli pliki mają być rozpakowane mają haseł, można spróbować to:
String source = "folder/source.zip";
String destination = "folder/source/";
String password = "password";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
Mam nadzieję, że jest to przydatne.
Oto proste rozwiązanie, które jest zgodne z bardziej nowoczesnymi konwencjami. Jeśli rozpakujesz większe pliki, możesz chcieć zmienić rozmiar bufora na mniejszy. Jest tak, że nie przechowujesz wszystkich plików w pamięci.
public static void unzip(File source, String out) throws IOException {
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(source))) {
ZipEntry entry = zis.getNextEntry();
while (entry != null) {
File file = new File(out, entry.getName());
if (entry.isDirectory()) {
file.mkdirs();
} else {
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
byte[] buffer = new byte[Math.toIntExact(entry.getSize())];
int location;
while ((location = zis.read(buffer)) != -1) {
bos.write(buffer, 0, location);
}
}
}
entry = zis.getNextEntry();
}
}
}
Tutaj jest bardziej „nowoczesne” kompletny kod na podstawie this postu ale refactored (i przy użyciu Lombok
):
import lombok.experimental.var;
import lombok.val;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipInputStream;
import static java.nio.file.Files.createDirectories;
public class UnZip
{
public static void unZip(String sourceZipFile, String outputDirectory) throws IOException
{
val folder = new File(outputDirectory);
createDirectories(folder.toPath());
try (val zipInputStream = new ZipInputStream(new FileInputStream(sourceZipFile)))
{
var nextEntry = zipInputStream.getNextEntry();
while (nextEntry != null)
{
val fileName = nextEntry.getName();
val newFile = new File(outputDirectory + File.separator + fileName);
createDirectories(newFile.getParentFile().toPath());
writeFile(zipInputStream, newFile);
nextEntry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
}
}
private static void writeFile(ZipInputStream inputStream, File file) throws IOException
{
val buffer = new byte[1024];
try (val fileOutputStream = new FileOutputStream(file))
{
int length;
while ((length = inputStream.read(buffer)) > 0)
{
fileOutputStream.write(buffer, 0, length);
}
}
}
}
- 1. Jak rozpakować konkretny folder .zip z Pythonem
- 2. Jak rozpakować folder zip za pomocą kodu php
- 3. node.js - Zip/Rozpakuj folder
- 4. Jak rozpakować plik zip C#
- 5. Android: Jak rozpakować zaszyfrowany plik zip
- 6. Jak rozpakować plik .zip na iOS?
- 7. Jak rozpakować/rozpakować w Emacs
- 8. Jak zip folder bez pełnej ścieżki
- 9. Jak rozpakować tablicę?
- 10. Jak rozpakować Iterator?
- 11. Folder do pobrania Github jako zip
- 12. Jak mogę rozpakować pojedynczy plik z archiwum ZIP przy użyciu archiwum Perl's Archive :: Zip?
- 13. Zip Java tworzy "uszkodzone" pliki zip
- 14. Jak dodać folder do archiwum zip z ICSharpCode.SharpZipLib
- 15. Jak rozpakować plik w obiektywnym c?
- 16. Jak rozpakować pliki w Heroku Buildpack
- 17. Jak utworzyć plik w java (nie folder)?
- 18. python: kiedy mogę rozpakować generator?
- 19. Java Jar Ant to folder
- 20. Jak rozpakować Color.PackedValue
- 21. jak rozpakować z pigz
- 22. Jak rozpakować plik io.ReadCloser?
- 23. Korzystanie SharpZipLib rozpakować konkretne pliki?
- 24. Jak rozpakować komunikat SOAP XML do obiektu Java
- 25. Jak rozpakować wartości zwracane przez javascript (nashorn) w obiekcie Java?
- 26. jak programowo wyodrębnić lub rozpakować plik .7z (7-zip) za pomocą R
- 27. Homestead: ERR! tar rozpakować błąd rozpakować
- 28. Rozpakuj plik .zip
- 29. Jak rozpakować zawartość pliku JavaScript?
- 30. Jak rozpakować html w javascript?
Jest to część I rzeczywiście trzeba ... Mam dostęp do mojego folderu w ZIP i chcesz go zapisać w sdcard/foldername z jego zawartością z ZIP. Jak to zrobić? – Waypoint
Cóż, myślę, że powinieneś spróbować napisać jakiś kod, spojrzeć na kilka przykładów i jeśli zawiedziesz lub utkniesz - wróć tutaj z kodem. –