Java 压缩和解压文件

Java 压缩和解压文件

Java中提供了DeflaterOutputStream和InflaterInputStream类来压缩和解压文件内容。这些类提供了有用的方法,可用于压缩文件内容。

使用DeflaterOutputStream压缩文件

这个类实现了一个输出流过滤器,用于以 “deflate “压缩格式压缩数据。它也被用作其他类型的压缩过滤器的基础,比如GZIPOutputStream。

重要的方法

  • void close() : 将剩余的压缩数据写入输出流并关闭底层流。
  • protected void deflate() : 将下一个压缩数据块写到输出流。
  • void finish() : 完成向输出流写入压缩数据,而不关闭底层流。
  • void flush( ) : 冲洗压缩的输出流。
  • void write(byte[] b, int off, int len) : 向压缩输出流写入一个字节数组,其中off是数据的起始偏移量,len是总字节数。
  • void write(int b) : 写一个字节到压缩输出流。

压缩文件(文件1)的步骤

  • 取一个输入文件’file 1’到FileInputStream用于读取数据。
  • 取输出文件’file 2’并将其分配给FileOutputStream。这将有助于将数据写进’file2’。
  • 将FileOutputStream分配给DeflaterOutputStream用于压缩数据。
  • 现在,从FileInputStream读取数据并将其写入DeflaterOutputStream。它将压缩数据并将其发送到FileOutputStream,后者将压缩后的数据存储到输出文件中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
  
class zip
{
    public static void main(String[] args) throws IOException {
        //Assign the original file : file to
        //FileInputStream for reading data
        FileInputStream fis=new FileInputStream("file1");
  
        //Assign compressed file:file2 to FileOutputStream
        FileOutputStream fos=new FileOutputStream("file2");
  
        //Assign FileOutputStream to DeflaterOutputStream
        DeflaterOutputStream dos=new DeflaterOutputStream(fos);
  
        //read data from FileInputStream and write it into DeflaterOutputStream
        int data;
        while ((data=fis.read())!=-1)
        {
            dos.write(data);
        }
  
        //close the file
        fis.close();
        dos.close();
    }
}

使用InflaterInputStream对文件进行解压

这个类实现了一个流过滤器,用于解压 “deflate “压缩格式的数据。它也被用作其他解压过滤器的基础,比如GZIPInputStream。

重要的方法

  • int available() : 在达到EOF后返回0,否则总是返回1。
  • void close() : 关闭输入流并释放与该流相关的任何系统资源。
  • protected void fill() : 用更多的数据填充输入缓冲区以进行解压。
  • void mark(int readlimit) : 标记输入流中的当前位置。
  • boolean markSupported() : 测试输入流是否支持标记和重置方法。
  • int read() : 读取一个未压缩数据的字节。
  • int read(byte[] b, int off, int len) : 将解压后的数据读成一个字节数组到压缩后的输出流,其中off是数据的起始偏移量,len是总的字节数。
  • void reset() : 将这个流重新定位到最后一次对这个输入流调用mark方法时的位置。

解压一个文件的步骤

  • 名称为’file2’的文件现在包含压缩数据,我们需要从这个文件中获得原始的解压数据。
  • 将压缩后的文件’file2’分配给FileInputStream。这有助于从’file2’中读取数据。
  • 将输出文件’file3’分配给FileOutputStream。这将有助于将未压缩的数据写入’file3’中。
  • 现在,从InflaterInputStream读取未压缩的数据并将其写入FileOutputStream。这将把未压缩的数据写到’file3’。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
  
//Uncompressing a file using an InflaterInputStream
class unzip
{
    public static void main(String[] args) throws IOException {
        //assign Input File : file2 to FileInputStream for reading data
        FileInputStream fis=new FileInputStream("file2");
  
        //assign output file: file3 to FileOutputStream for reading the data
        FileOutputStream fos=new FileOutputStream("file3");
          
        //assign inflaterInputStream to FileInputStream for uncompressing the data
        InflaterInputStream iis=new InflaterInputStream(fis);
          
        //read data from inflaterInputStream and write it into FileOutputStream 
        int data;
        while((data=iis.read())!=-1)
        {
            fos.write(data);
        }
          
        //close the files
        fos.close();
        iis.close();
          
    }
}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程