欢迎访问宙启技术站
智能推送

如何使用java函数实现文件压缩和解压缩?

发布时间:2023-06-10 21:12:31

Java提供了压缩和解压缩文件的功能。Java中有一个叫做java.util.zip的包,其中包含了ZipOutputStream和ZipInputStream两个主要的类,分别用于实现文件压缩和解压缩。

文件压缩

文件压缩的过程,可以将多个文件或文件夹压缩成一个.zip格式文件。具体步骤如下:

1. 选择压缩文件或文件夹,并创建ZipOutputStream对象。

2. 创建压缩文件。使用ZipEntry类来写入每个文件的条目。

3. 使用BufferedInputStream读入指定的文件内容。

4. 使用ZipOutputStream写入压缩文件。

5. 关闭输入输出流。

以下是示例代码:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileCompression {

    public static void main(String[] args) {
        String[] filesToCompress = {"file1.txt", "file2.jpg", "folder1"};

        try {
            //创建压缩文件
            FileOutputStream fos = new FileOutputStream("compressed.zip");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ZipOutputStream zos = new ZipOutputStream(bos);

            //循环压缩每个文件或目录
            for (String file : filesToCompress) {
                if (file.endsWith(File.separator)) {  //如果是目录,则创建ZipEntry实例
                    ZipEntry entry = new ZipEntry(file);
                    zos.putNextEntry(entry);  //写入该目录
                } else { //如果是文件,则写入ZipEntry实例
                    ZipEntry entry = new ZipEntry(file);
                    zos.putNextEntry(entry);

                    //使用缓冲流读入文件内容
                    FileInputStream fis = new FileInputStream(file);
                    BufferedInputStream bis = new BufferedInputStream(fis);

                    //循环读取并写入ZipOutputStream对象
                    byte[] data = new byte[1024];
                    int count;
                    while ((count = bis.read(data)) != -1) {
                        zos.write(data, 0, count);
                    }

                    bis.close();  
                }
            }

            zos.close();  //关闭压缩流

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

文件解压缩

文件解压缩的过程,可以将压缩文件解压缩到指定目录中。具体步骤如下:

1. 选择需要解压的zip文件,并创建ZipInputStream对象。

2. 逐一读取ZipEntry条目,并获取输入流。

3. 将输入流读入到缓冲区中。

4. 创建新文件并将缓冲区内容写入。

5. 关闭输入输出流。

以下是示例代码:

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class FileDecompression {

    public static void main(String[] args) {
        try {
            //创建ZipInputStream对象
            ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));

            //迭代读取ZipEntry
            ZipEntry entry;
            while ((entry = zis.getNextEntry()) != null) {
                String fileName = entry.getName();
                File newFile = new File(fileName);

                //创建新文件
                FileOutputStream fos = new FileOutputStream(newFile);
                BufferedOutputStream bos = new BufferedOutputStream(fos);

                //循环读取并写入文件对象
                byte[] data = new byte[1024];
                int count;
                while ((count = zis.read(data)) != -1) {
                    bos.write(data, 0, count);
                }

                bos.close();
            }

            zis.close();  //关闭ZipInputStream流

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

在实现文件压缩和解压缩的过程中,需要注意关闭流以及处理可能出现的异常。此外,需要确保压缩和解压的文件路径、文件名及文件格式正确。