如何用Java解压缩文件
时间:2020-01-09 10:35:31 来源:igfitidea点击:
在Java中压缩文件时,根据是压缩文件还是在Java中压缩文件夹(其中整个目录结构都已存档),会有不同的逻辑。但是用Java解压缩文件并不需要这些不同的功能。一个用于解压缩文件的Java程序负责所有不同的功能。
解压缩文件-Java程序
要解压缩文件,我们需要执行以下步骤:
- 从压缩存档中读取压缩文件。为此,使用了java.util.zip.ZipInputStream类。
- 从ZipInputStream中,使用getNextEntry()方法读取文件和目录的zip条目。
- 如果该条目用于目录,则只需创建目录。如果该条目是针对文件的,则读取文件的内容并将其写入目标文件。
- 使用closeEntry()方法关闭当前条目。
- 迭代完所有zip条目后,关闭输入和输出流。
public class UnzipFile { private static final int BUFFER = 2048; public static void main(String[] args) { final String SOURCE_ZIPDIR = "F:/theitroad/Parent.zip"; // creating the destination dir using the zip file path // by truncating the ".zip" part String DESTINATION_DIR = SOURCE_ZIPDIR.substring(0, SOURCE_ZIPDIR.lastIndexOf('.')); //System.out.println("" + DESTINATION_DIR); extract(SOURCE_ZIPDIR, DESTINATION_DIR); } private static void extract(String source, String dest){ try { File root = new File(dest); if(!root.exists()){ root.mkdir(); } BufferedOutputStream bos = null; // zipped input FileInputStream fis = new FileInputStream(source); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry entry; while((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File file = new File(dest + File.separator + fileName); if (!entry.isDirectory()) { extractFileContentFromArchive(file, zis); } else{ if(!file.exists()){ file.mkdirs(); } } zis.closeEntry(); } zis.close(); } catch(Exception e) { e.printStackTrace(); } } private static void extractFileContentFromArchive(File file, ZipInputStream zis) throws IOException{ FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER); int len = 0; byte data[] = new byte[BUFFER]; while ((len = zis.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, len); } bos.flush(); bos.close(); } }