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函数实现数据的压缩与解压缩
综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力 ...
随机推荐
- 怎么给ABBYY FineReader Mac导入图像
ABBYY FineReader Pro for Mac作为ABBYY旗下重要的OCR文字识别软件之一,专为Mac用户定制,为各种各样的任务提供了单一.全面的解决方案,它是所有需要扫描和处理数字纸质文 ...
- Onload,Onunload,onbeforeunload,$(window).load(function() {})和$(document).ready(function(){})
Onload,$(window).load(function() {}):元素都加载完毕,才可以执行. $(document).ready(function(){}):不一定要等所有的js和图片加载完 ...
- OpenJudge计算概论-二维数组右上左下遍历
/*====================================================================== 二维数组右上左下遍历 总时间限制: 1000ms 内存 ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- FROM_UNIXTIME 格式化MYSQL时间戳函数
FROM_UNIXTIME 格式化MYSQL时间戳函数 对MYSQL没有进行过深入的研究,基础知识匮乏,一遇到问题只能手册,看来要把MYSQL的学习安排进时间表了. 函数:FROM_UNIXTIME作 ...
- Log4j使用详解(log4j.properties格式)
Log4j使用详解(log4j.properties格式) 1.Log4j 的引入 在应用程序中添加日志记录总的来说基于三个目的: ① 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计 ...
- android虚拟机(ROOT)权限
自己找的一个比较好用的pc端安卓模拟器,蓝手指总所周知吧,这个是较高版本但不是最新的一个版本,关键是自带root功能,对于破解安卓存档类游戏还是有用的.安卓版本4.4.2 BlueStacks 0.9 ...
- 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)
问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...
- 111个知名Java项目集锦,包括url和描述
转:http://www.cnblogs.com/wangs/p/3282183.html 项目名称 项目描述 ASM Java bytecode manipulation framework A ...
- 【java】 java 实现mysql备份
使用java实现mysql的备份: public class MySQLBackUp { /** * Java代码实现MySQL数据库导出 * * @author GaoHuanjie * @para ...