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

使用Java函数实现文件压缩与解压缩功能

发布时间:2023-07-06 08:59:15

文件压缩和解压缩是常见的操作,Java提供了多种类库可以实现这些功能。下面是一个使用Java函数实现文件压缩与解压缩功能的示例。

1. 压缩文件

import java.io.*;
import java.util.zip.*;

public class FileCompressor {
    public static void compressFile(String sourceFile, String compressedFile) {
        try {
            FileInputStream fis = new FileInputStream(sourceFile);
            FileOutputStream fos = new FileOutputStream(compressedFile);
            ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(fos));
            
            byte[] buffer = new byte[1024];
            int bytesRead;
            zipOut.putNextEntry(new ZipEntry(sourceFile));
            
            while ((bytesRead = fis.read(buffer)) != -1) {
                zipOut.write(buffer, 0, bytesRead);
            }
            
            fis.close();
            zipOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用java.util.zip.ZipOutputStream类来创建一个压缩文件,并将源文件内容写入到压缩文件中。

2. 解压缩文件

import java.io.*;
import java.util.zip.*;

public class FileDecompressor {
    public static void decompressFile(String compressedFile, String outputFolder) {
        try {
            FileInputStream fis = new FileInputStream(compressedFile);
            ZipInputStream zipIn = new ZipInputStream(new BufferedInputStream(fis));
            ZipEntry entry = zipIn.getNextEntry();
            
            while (entry != null) {
                String filePath = outputFolder + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dir = new File(filePath);
                    dir.mkdir();
                }
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
            
            zipIn.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] buffer = new byte[1024];
        int bytesRead;
        
        while ((bytesRead = zipIn.read(buffer)) != -1) {
            bos.write(buffer, 0, bytesRead);
        }
        
        bos.close();
    }
}

上述代码使用java.util.zip.ZipInputStream类来打开压缩文件,并逐个提取压缩文件中的条目,并将其内容写入到输出文件中。

需要注意的是,上述示例中的压缩文件仅支持单个文件的压缩和解压缩。如果需要支持多个文件的压缩和解压缩,可以将上述代码封装到一个更高级的接口中。

使用示例:

public class Main {
    public static void main(String[] args) {
        // 压缩文件
        FileCompressor.compressFile("source.txt", "compressed.zip");
        
        // 解压缩文件
        FileDecompressor.decompressFile("compressed.zip", "output");
    }
}

上述示例中,source.txt是要压缩的源文件,compressed.zip是压缩后的文件,output是解压缩后的文件夹。