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();
}
}