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函数实现数据的压缩与解压缩
综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力 ...
随机推荐
- ASP.NET Cookie 概述【转】
来源:http://msdn.microsoft.com/zh-cn/library/ms178194(VS.80).aspx ASP.NET Cookie 概述 Cookie 提供了一种在 Web ...
- 1kkk
代码: # !usr/bin/python3.4 # -*- coding:utf-8 -*- import requests import os import time import re from ...
- python小程序:无限求和平均
编写一个程序,重复读取数据,直到用户输入‘done’.一旦输入‘done’,打印总和.个数与平均值.如果用户输入的不是数字,使用try和except捕获异常,打印错误信息,然后跳过继续执行循环. ar ...
- mysql 获取一个表中缺失的最小编号
select count(*),t1.`name` from test_id t1INNER JOIN test_id t2on t1.id >= t2.idgroup by t1.id,t1. ...
- Linux下访问其他机器的共享
1.如何查看其他机器上的共享列表? 解答:使用smbclient 客户端,在Linux机器上可以用来查看服务器上的共享资源,也可以向ftp一样,用户可以登陆samba服务器,也可以上传put和下载ge ...
- 编译在arm板上使用的sqlite3的静动态库
采用的是sqlite-autoconf-3080002.tar.gz 解压 tar xvf sqlite-autoconf-3080002.tar.gz 进入 cd sqlite-autoconf-3 ...
- 2. hdfs
一.Hdfs的shell 所有hadoop的fs的shell均用uri路径作为参数 uri格式:schema://authority/path.hdfs的schema是hdfs.其中,schema和a ...
- OC知识点
1.@autoreleasepool why1 2.retain O-C内存管理和点语法1>OC内存管理正常情况要使用大量的retain和relrese操作2>点语法可以减少使用retai ...
- SPOJ Query on a tree 树链剖分 水题
You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...
- [复变函数]第17堂课 5 解析函数的 Laurent 展式与孤立奇点 5. 1 解析函数的 Laurent 展式
0. 引言 (1) $f$ 在 $|z|<R$ 内解析 $\dps{\ra f(z)=\sum_{n=0}^\infty c_nz^n}$ (Taylor 级数). (2) $f$ 在 $ ...