JAVA中压缩与解压缩
以压缩Zip文件为例。主要是通过ZipOutputStream类实现。解压缩主要使用ZipFile类和ZipInputStream以及ZipEntry类。
package main; import java.io.*;
import java.util.*;
import java.util.zip.*;
public class Main
{ public static final Integer BUFFERSIZE = 1024*1024;
public static void main(String[] args) throws Exception
{
File fileNeedToBeCompressed = new File("C:" + File.separator + "D" + File.separator + "code" + File.separator + "output.xml");
StringBuffer zipFilePath = new StringBuffer(fileNeedToBeCompressed.getParent());
zipFilePath.append(File.separator).append(getFileName(fileNeedToBeCompressed.getName())).append(".zip");
File compressedFile = new File(zipFilePath.toString()); InputStream is = null;
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compressedFile)); if(fileNeedToBeCompressed.isDirectory())
{
//压缩一个文件夹 File[] files = fileNeedToBeCompressed.listFiles();
for(File file : files)
{
compressFile(file, is, zos);
}
}
else
{
//压缩一个文件 compressFile(fileNeedToBeCompressed,is,zos);
}
zos.close(); System.out.println("///~ Main done");
} public static String getFileName(String fileName)
{
if(fileName.lastIndexOf('.') < 0)
{
return fileName;
}
else
{
return fileName.substring(0,fileName.lastIndexOf('.'));
}
} public static void compressFile(File fileNeedToBeCompressed,InputStream is,ZipOutputStream zos) throws Exception
{
System.out.println("正在压缩:" + fileNeedToBeCompressed.getName());
is = new FileInputStream(fileNeedToBeCompressed);
zos.putNextEntry(new ZipEntry(fileNeedToBeCompressed.getName()));
int bytesReaded = 0;
byte[] buffer = new byte[BUFFERSIZE];
while((bytesReaded = is.read(buffer)) > 0)
{
zos.write(buffer,0,bytesReaded);
}
is.close();
} }
ZipInputStream 获取压缩文件中的每个ZipEntry,然后ZipFile通过ZipEntry拿到输入流。
package main; import java.io.*;
import java.util.*;
import java.util.zip.*;
public class Main
{ public static final Integer BUFFERSIZE = 1024*1024;
public static void main(String[] args) throws Exception
{
// {
// File fileNeedToBeCompressed = new File("C:" + File.separator + "D" + File.separator + "code" + File.separator + "resource");
// StringBuffer zipFilePath = new StringBuffer(fileNeedToBeCompressed.getParent());
// zipFilePath.append(File.separator).append(getFileName(fileNeedToBeCompressed.getName())).append(".zip");
// File compressedFile = new File(zipFilePath.toString());
//
//
// InputStream is = null;
// ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compressedFile));
//
// if(fileNeedToBeCompressed.isDirectory())
// {
// //压缩一个文件夹
// File[] files = fileNeedToBeCompressed.listFiles();
// for(File file : files)
// {
// compressFile(file, is, zos);
// }
// }
// else
// {
// //压缩一个文件
//
// compressFile(fileNeedToBeCompressed,is,zos);
// }
// zos.close();
// } {
String zipFilePath = "C:" + File.separator + "D" + File.separator + "code" + File.separator + "resource.zip";
ZipFile zipFile = new ZipFile(zipFilePath);
ZipInputStream zis = new ZipInputStream(new FileInputStream(new File(zipFilePath)));
ZipEntry tempZipEntry = null;
OutputStream os = null;
byte[] buffer = new byte[BUFFERSIZE];
File unzipedFolder = new File(getFileName(zipFile.getName()));
int bytesReaded = 0;
if(!unzipedFolder.exists())
unzipedFolder.mkdirs();
while((tempZipEntry = zis.getNextEntry())!= null)
{
System.out.println("正在解压:" + tempZipEntry.getName());
File newFile = new File(unzipedFolder.getPath() + File.separator + tempZipEntry.getName());
InputStream is = zipFile.getInputStream(tempZipEntry);
os = new FileOutputStream(newFile);
while(( bytesReaded = is.read(buffer)) > 0)
{
os.write(buffer, 0, bytesReaded);
}
os.close();
}
zipFile.close();
zis.close();
}
System.out.println("///~ Main done");
} public static String getFileName(String fileName)
{
if(fileName.lastIndexOf('.') < 0)
{
return fileName;
}
else
{
return fileName.substring(0,fileName.lastIndexOf('.'));
}
} public static void compressFile(File fileNeedToBeCompressed,InputStream is,ZipOutputStream zos) throws Exception
{
System.out.println("正在压缩:" + fileNeedToBeCompressed.getName());
is = new FileInputStream(fileNeedToBeCompressed);
zos.putNextEntry(new ZipEntry(fileNeedToBeCompressed.getName()));
int bytesReaded = 0;
byte[] buffer = new byte[BUFFERSIZE];
while((bytesReaded = is.read(buffer)) > 0)
{
zos.write(buffer,0,bytesReaded);
}
is.close();
} }
JAVA中压缩与解压缩的更多相关文章
- linux中压缩与解压缩命令小结
linux中压缩与解压操作非常常见,其命令参数也非常的多,这里只介绍最经常用的带打包文件的几种压缩和解压方式和几个最常用的参数. 现在最常用的压缩和解压工具是gzip和bzip2,这两种工具不能相互解 ...
- Java实现压缩与解压缩
import java.io.*; import java.util.*; import java.util.zip.ZipOutputStream; import java.util.zip.Zip ...
- java 版本压缩、解压缩zip
import java.io.*; import java.util.*; import java.util.zip.ZipOutputStream; import java.util.zip.Zip ...
- java GZIP压缩与解压缩
1.GZIP压缩 public static byte[] compress(String str, String encoding) { if (str == null || str.length( ...
- linux中压缩与解压缩命令
.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ...
- linux中压缩、解压缩命令详解
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...
- java ZipOutputStream压缩文件,ZipInputStream解压缩
java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...
- JAVA中的deflate压缩实现
在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,JAVA中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLA ...
- 利用JAVA API函数实现数据的压缩与解压缩
综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力 ...
随机推荐
- {好文备份}SQL索引一步到位
SQL索引一步到位(此文章为"数据库性能优化二:数据库表优化"附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百 ...
- debug,trace,release项目配置区别
Debug模式是用来调试用的,它生成的执行文件中含有大量调试信息,所以很大: Release模式生成的执行文件消除了这些调试信息,可用来作为成品发布 Debug只在debug状态下会输出,Trace在 ...
- Nuget 摘录
1 , Creating and Publishing a Package https://docs.nuget.org/create/creating-and-publishing-a-pa ...
- Ruby Exception
begin #可能发生异常的地方 rescue #如何处理异常 end rescue,哈哈,太有爱的一个单词了... begin #可能发生异常的地方 rescue => exception # ...
- linux 编译安装nginx,配置自启动脚本
本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装nginx,记录下安装过程: 参照这篇文章:Linu ...
- SQL SERVER 组内排序
取出每组的第一个 select *from (select * ,RANK ( ) OVER( PARTITION by org order by reportcode asc) PartionNum ...
- POJ #2479 - Maximum sum
Hi, I'm back. This is a realy classic DP problem to code. 1. You have to be crystal clear about what ...
- php 自带函数
memory_get_usage()://查看当前内存使用情况单位 bytes str_repeat("liuhui", 2);//字符串重复指定次数,liuhui重复2次
- LVS包转发模型和调度算法(转)
LVS简介 Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来 讲, CPU.I/O处理能力很快会成为瓶颈.由于单台 ...
- android学习笔记28——Activity生命周期
Activity生命周期 Activity的活动状态由android已Activity栈的形式管理,当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动状态转入非 ...