在Java中,可以使用压缩流来对数据进行压缩和解压缩操作。常见的压缩流包括ZIPOutputStream、ZIPInputStream等。这些流允许你在读写数据时对其进行压缩和解压缩,以节省存储空间或网络带宽。
package IoStream.zip;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipStreamdemo1
{
public static void main(String[] args) throws IOException
{
File originalfile = new File(".\\srcc.zip");
File targetfile = new File(".\\");
unzipfile(originalfile,targetfile);
}
public static void unzipfile(File originalfile,File targetfile) throws IOException
{
ZipInputStream zis = new ZipInputStream(new FileInputStream(originalfile));
ZipEntry entry;//压缩包中的每个文件或文件夹都是zipentry对象
while ((entry = zis.getNextEntry()) != null){
System.out.println(entry);
if (entry.isDirectory()){
//文件夹处理
File file = new File(targetfile,entry.toString());
file.mkdirs();
}
else
{
//文件处理
FileOutputStream fos = new FileOutputStream(new File(targetfile,entry.toString()));
int b;
while ((b = zis.read()) != -1){
fos.write(b);
}
fos.close();
zis.closeEntry();
}
}
zis.close();
}
}
- 压缩流
* 需求
* 把a.txt打包成一个压缩包
package IoStream.zip;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class zipdemo2
{
public static void main(String[] args) throws IOException
{
/*
* 压缩流
* 需求
* 把a.txt打包成一个压缩包
* */
//1,创建File对象表示要压缩的文件
File file = new File(".\\a.txt");
//2,创建File对象表示压缩包的位置
File file1 = new File(".\\");
toZip(file,file1);
}
private static void toZip(File file, File file1) throws IOException
{
//1,创建压缩流关联压缩包
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(file1,"a.zip")));
//2,创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
ZipEntry entry = new ZipEntry(file.getName());
//3,把ZipEntry对象放到压缩包当中
zos.putNextEntry(entry);
//4,把file中的文件数据写入压缩包当中
FileInputStream fis = new FileInputStream(file);
int b;
while ((b = fis.read()) != -1){
zos.write(b);
}
zos.closeEntry();
zos.close();
}
}
- 压缩流
* 需求
* 把文件夹压缩成一个压缩包
package IoStream.zip;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class zipdemo3
{
public static void main(String[] args) throws IOException
{
/*
* 压缩流
* 需求
* 把文件夹压缩成一个压缩包
*/
//1,创建File对象表示要压缩的文件
File file = new File(".\\srcc");
//2,创建File对象表示压缩包的位置(压缩包父级路径)
File destparent = file.getParentFile();
//3,创建File对象压缩包的路径
File dest = new File(destparent,file.getName()+".zip");
//4,创建压缩流,关联压缩包
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
//5,获取file中的每一个文件,变成ZipEntry对象,放入压缩包中
toZip(file,zos,file.getName());
//6,释放资源
}
public static void toZip(File file, ZipOutputStream zos , String name) throws IOException
{
//进入文件夹
File[] files = file.listFiles();
//遍历数组
for (File f : files)
{
if(f.isFile()){
//判断是文件,变为ZipEntry对象放入压缩包中
ZipEntry entry = new ZipEntry(name+"\\"+f.getName());//这里路径注意
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(f);
//读取文件数据写入压缩包
int b;
while ((b = fis.read()) != -1){
zos.write(b);
}
fis.close();
zos.closeEntry();
}
else{
//如果是文件夹则,递归
toZip(f,zos,name+"\\"+f.getName());
}
}
}
}