由于频繁需要解压ZIP,加压ZIP
故自己写了个工具类方便以后处理时用到,暂时不给过多解释,有啥问题,大家一起讨论哈
FileItem:
public class FileItem {
private String fileName;
private byte[] fileContent;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public byte[] getFileContent() {
return fileContent;
}
public void setFileContent(byte[] fileContent) {
this.fileContent = fileContent;
}
}
FileUtil:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class FileUtil {
/**缓存大小*/
private final static int BUFFER_SIZE = 8192;
/**后缀名*/
private final static String SUFFIX = "zip";
/**后缀名分隔符*/
private final static String POINT = ".";
/**
* 获得字节数组
*
* @param filepath 文件全路径
* @return 字节数组
* @throws IOException IOException
*/
public static byte[] getBytes(File file) throws IOException{
return getBytes(file.getAbsolutePath());
}
public static byte[] getBytes(String filepath) throws IOException {
BufferedInputStream bis = null;
ByteArrayOutputStream byteArrayOutputStream = null;
BufferedOutputStream bos = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
bis = new BufferedInputStream(new FileInputStream(filepath));
bos = new BufferedOutputStream(byteArrayOutputStream);
byte[] bytes = new byte[BUFFER_SIZE];
int len;
while ((len = bis.read(bytes, 0, BUFFER_SIZE)) != -1) {
bos.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw e;
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (null != bis) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != byteArrayOutputStream) {
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != bos) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return byteArrayOutputStream.toByteArray();
}
/**
* 统一文件分隔符为LINUX,类UNIX文件系统风格
*
* @param direcotory 目录
* @return 统一处理后目录字符串风格
*/
private static String replaceAllSeparator(String direcotory) {
String str = direcotory.replaceAll("\\\\", "/");
return str.length() != str.lastIndexOf("/") ? str + "/" : str;
}
/**
* 将文件项写到文件
*
* @param fileItem 文件项
* @param directory 目录
* @throws IOException IOException
*/
public static void writeFile(FileItem fileItem, String directory)
throws IOException {
File dir = new File(directory);
if (!dir.exists()) {
dir.mkdirs();
}
writeFile(fileItem.getFileContent(), replaceAllSeparator(directory)
+ fileItem.getFileName());
}
/**
* 写文件
*
* @param fileContent 文件二进制流
* @param filepath 文件全路径
* @throws IOException IOException
*/
public static void writeFile(byte[] fileContent, String filepath)
throws IOException {
InputStream inputStream = new ByteArrayInputStream(fileContent);
writeFile(inputStream, filepath);
}
/**
* 将流写到一个文件
*
* @param inputStream 文件流
* @param filepath 文件路径
* @throws IOException IOException
*/
public static void writeFile(InputStream inputStream, String filepath)
throws IOException {
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
try {
File file = new File(filepath);
if (!file.exists()) {
file.createNewFile();
}
bos = new BufferedOutputStream(new FileOutputStream(file));
bis = new BufferedInputStream(inputStream);
byte[] buffer = new byte[BUFFER_SIZE];
int len = -1;
while ((len = bis.read(buffer, 0, BUFFER_SIZE)) != -1) {
bos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (null != bos)
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
if (null != bis)
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 解压zip文件
* @param filepath 文件全路径
* @return 解压后的文件项
* @throws IOException IOException
*/
public static List uncompressZip(String filepath) throws IOException {
ByteArrayOutputStream baos = null;
BufferedOutputStream bos = null;
ZipInputStream zis = null;
// zipInputStream
List fileList = null;
try {
zis = new ZipInputStream(new FileInputStream(filepath));
baos = new ByteArrayOutputStream();
bos = new BufferedOutputStream(baos);
fileList = new ArrayList();
byte[] buffer = new byte[BUFFER_SIZE];
int len = -1;
ZipEntry zipEntry = null;
while (null != (zipEntry = zis.getNextEntry())) {
if (null != zipEntry) {
System.out.println("Name:" + zipEntry.getName() + ",Size:"
+ zipEntry.getSize() + "bytes");
while (-1 != (len = zis.read(buffer))) {
bos.write(buffer, 0, len);
}
bos.flush();
byte[] fileContent = baos.toByteArray();
FileItem item = new FileItem();
item.setFileName(zipEntry.getName());
item.setFileContent(fileContent);
fileList.add(item);
}
}
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (null != zis) {
try {
zis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != baos) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != bos) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return fileList;
}
/**
* 将目录压缩成zip包
*
* @param filepath
* 文件全路径
* @throws IOException
* IOException
*/
public static FileItem compressZip(String filepath) throws IOException {
File directory = new File(filepath);
String filename = directory.getName();
File[] fileList = directory.listFiles();
ZipOutputStream zos = null;
BufferedInputStream bis = null;
ByteArrayOutputStream baos = null;
FileItem fileItem = null;
try {
baos = new ByteArrayOutputStream();
zos = new ZipOutputStream(baos);
byte[] buffer = new byte[BUFFER_SIZE];
int len = -1;
for (File file : fileList) {
bis = new BufferedInputStream(new FileInputStream(file));
while (-1 != (len = bis.read(buffer, 0, BUFFER_SIZE))) {
//ZipEntry为Zip压缩文件的每一项
ZipEntry zipEntry = new ZipEntry(file.getName());
zipEntry.setSize(file.length());
zipEntry.setCompressedSize(file.length());
zos.putNextEntry(zipEntry);
zos.write(buffer, 0, len);
}
//做完一个文件的读写应清下缓存
zos.flush();
if (null != bis) {
bis.close();
}
}
//完成所有文件的读取,转化为一个二进制流的包装zos
zos.finish();
fileItem = new FileItem();
int index = filename.lastIndexOf(".");
filename = filename.substring(0, -1 == index ? filename.length()
: index);
//要生成zip文件的文件名
fileItem.setFileName(filename + POINT + SUFFIX);
//要生成的zip文件的二进制流
fileItem.setFileContent(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (null != baos) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != bis) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != zos) {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return fileItem;
}
/**
* 解压zip文件
*
* @param zipFile zip文件
* @return 解压后的文件项
* @throws IOException IOException
*/
public static List uncompressZip(File zipFile) throws IOException {
String filepath = zipFile.getAbsolutePath();
return uncompressZip(filepath);
}
public static void main(String[] args) throws IOException {
//加压
FileItem fileItem = compressZip("F:/Hbzspt/sbinput/SCYSB_1234567890_0901_20100912082719250");
//将SCYSB_1234567890_0901_20100912082719250.zip文件写到F:/zjie目录
FileUtil.writeFile(fileItem, "F:/zjie");
//解压F:/zjie/SCYSB_1234567890_0901_20100912082719250.zip文件
List fileItemList = FileUtil
.uncompressZip("F:/zjie/SCYSB_1234567890_0901_20100912082719250.zip");
//将解压后的文件流生成文件写到F:/zjie/SCYSB_1234567890_0901_20100912082719250/目录
for (int i = 0; i < fileItemList.size(); i++) {
FileItem item = (FileItem) fileItemList.get(i);
DbfUtil.dbfReader(item.getFileContent());
FileUtil.writeFile(item.getFileContent(), "F:/zjie/SCYSB_1234567890_0901_20100912082719250/"+item.getFileName());
}
}
}
分享到:
相关推荐
最新版非常好的Andorid解压和加压zip文件的企业级Demo,用人格保证不仅能用,而且最好用,积分值10分,你可以嫌它贵,但你千万别后悔,你将错过学习Android加压、解压zip最好的资料!
本例使用C#实现了,对文件和文件夹的ZIP压缩,和对Zip文件的解压。
php上传解压和加压在空火箭上传时用到你的空间如果没有了zip解压工具的话可以使用之个东西我懂得上www.xsjl.co.cc问我
这款zip文件加压解压工具使用java开发,支持linux/window平台,是性能卓越的国产文件压缩工具。
自解压制作工具用于自动加压的。和制作系统的作用
利用c语言加解压的开源代码,对zip文件进行解压和加压操作
700套高端简历模板,可以让早工作的你给hr眼前一亮,妹子票子都是立马就来!!! 解压密码:intern021
下载后解压,打开加压包,找到SecureFX.exe。输入IP和端口可以连接服务器。点击左上角的“打开SecureCRT”,输入IP和端口可以查看日志,部署环境等
使用ZLLIB压缩解压,封装压缩文件夹,加压标准ZIP的源码
我这里主要是结合项目的需求然后抽离出来的demo,主要是对图片的加压和解压 解压 使用.loadAsync(data)可以加载zip文件,data必须是二进制流,我这里是使用html原生的input上传文件来获取文件流,如果需要读取本地...
用于windows3.11的zip文件解压/加压工具
解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 ... * 加压监听 */ public static void UnZipFile(final String zipFileString, final String outPat
Mac版Java反编译工具jd-gui加压即用,无需安装,用过的都说太爽了,让我们快来试一下吧,配jd-gui操作手册链接:https://blog.csdn.net/m0_58697127/article/details/122538451?spm=1001.2014.3001.5502
将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 用于如JMETER阶梯加压场景 插件
BlazeMeter是一款脚本录制工具,录制的脚本可以导入jmeter,是badboy的替代品,喜欢的可以尝试下。先解压,再将加压后的文件夹拖入chrome://extensions/页面,即安装完成。
解压项目后需要先安装数据库,详细请参照《java后台安装部署文档.docx》文档描述,已经上传资源库了。加压后先执行默认sql脚本: project\03.数据库设计\bus_scan_code_db.sql 然后连接数据库进行查看,具体使用可以...
sonarqube5.6.7+sonar-scanner-2.8.zip + sonar-l10n-zh-plugin-1.11.rar jdk1.8 ,你的可以本机可以是1.7 只要指定下 sonarqube的运行指向jdk1.8就可以 详情看下配置文件 配套,找了挺久的,这两个版本完美配合,...
oracle的简易客户端加压后需要配置环境变量ORACLE_HOME=解压的目录 这个是32位的版本 官网下载地址https://www.oracle.com/technetwork/cn/database/features/instant-client/index-092699-zhs.html
本人自己写的框架实例,希望对大家有帮助。下载后,直接加压,导入eclipse的maven工程中,update maven后就可以运行了,解压的文件中有数据库的sql文件
安装Nexus由于服务器为window 2003 x86版本的,不能支持nexus 3.0,下载2.13版本的文件解压到指定文件夹中,加压后nexus文件中包含,两个文件夹:sonatype-work(私服上的文件默认存放路径)和nexus-2.13.0-01...