在Java 中解压文件示例

下面的例子中,我们使用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