下面的例子中,我们使用java.util.zip包的 ZipInputStream 读取一个 ZipFile,然后一个一个读取所有 ZipEntry。
然后使用 FileOutputStream 将所有文件写入文件系统。
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class Main
{
public static void main(String[] args)
{
// 打开文件
try(ZipFile file = new ZipFile("files.zip"))
{
FileSystem fileSystem = FileSystems.getDefault();
// 获取文件 ZipEntry
Enumeration<? extends ZipEntry> entries = file.entries();
//We will unzip files in this folder
String uncompressedDirectory = "uncompressed/";
Files.createDirectory(fileSystem.getPath(uncompressedDirectory));
// 遍历 ZipEntry
while (entries.hasMoreElements())
{
ZipEntry entry = entries.nextElement();
// 如果是目录,则创建目录
if (entry.isDirectory())
{
System.out.println("Creating Directory:" + uncompressedDirectory + entry.getName());
Files.createDirectories(fileSystem.getPath(uncompressedDirectory + entry.getName()));
}
// 如果是文件,则创建文件
else
{
InputStream is = file.getInputStream(entry);
BufferedInputStream bis = new BufferedInputStream(is);
String uncompressedFileName = uncompressedDirectory + entry.getName();
Path uncompressedFilePath = fileSystem.getPath(uncompressedFileName);
Files.createFile(uncompressedFilePath);
FileOutputStream fileOutput = new FileOutputStream(uncompressedFileName);
while (bis.available() > 0)
{
fileOutput.write(bis.read());
}
fileOutput.close();
System.out.println("Written :" + entry.getName());
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
日期:2020-09-17 00:09:28 来源:oir作者:oir
