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函数实现数据的压缩与解压缩
综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力 ...
随机推荐
- 虚拟化之vmware-vcenter
VMware ESXi.VMware vCenter Server 和 vSphere Client,它们分别是 vSphere 的虚拟化层.管理层和接口层. vcenter server 插件和vc ...
- ajax重构XMLHttpRequest
//重构XMLHttpRequestvar net = new Object(); //名字空間對象 net.READY_STATE_UNINITIALIZED = 0; net.READY_STAT ...
- python之selenium
selenium是处理异步加载的一种方法 总的来说是操作浏览器访问来获取自己想要的资料 优点是浏览器能看到的都能爬下来,简单有效,不需要深入破解网页加载形式 缺点是加载的东西太多,导致爬取速度变慢 # ...
- java中的包装类与装箱拆箱定义
JAVA 中int类型转String类型的通常方法,有三种: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i+"" ...
- Redis 高可用性解决方案(Sentinel)
Sentinel是Redis的高可用性解决方案: 由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主 ...
- nginx linux 下开机自动启动
这里使用的是编写shell脚本的方式来处理 vi /etc/init.d/nginx (输入下面的代码) #!/bin/bash# nginx Startup script for the Ngin ...
- mysql log
mysql binlog3种格式,row,mixed,statement. 解析工作 mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.0001 ...
- session_write_close()
功能: 结束当前的session 操作 保存session 数据 说的很明白了, 当脚本请求没有调用session_write_close(); 时虽然 session 的数据是存储住了.但是 s ...
- Ruby Numeric
Numeric |-- Float |-- Integer |-- Fixnum |-- Bignum Numeric的基本结构 整数的差异,一般的数字Fixnum就能够处理,即使超过了Fixnum的 ...
- ORACLE的表被 另一个用户锁定,如何解除..
SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s W ...