import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class TestZipFile {
private static final Logger LOG = LoggerFactory.getLogger(TestZipFile.class);
public static void main(String[] args) {
String baseFilePath = "C:\\Users\\Administrator\\Desktop\\folder";
//1 模拟将zip文件转换成字节数组
byte[] originFileBytesByFile = getBytesByFile(baseFilePath + "\\testzip1.zip");
System.out.println("模拟将zip文件转换成字节数组:\r\n" + originFileBytesByFile);
//2 将zip字节数组转换成zip文件
getFileByBytes(originFileBytesByFile, baseFilePath, "testzip_1.zip");
//3 读取zip文件中的txt中的内容输出txt文件字节数组
byte[] childrenFileBytesByFile = readZipFile(baseFilePath + "\\testzip_1.zip");
System.out.println("读取zip文件中的txt中的内容输出txt文件字节数组:\r\n" + childrenFileBytesByFile);
//4 模拟将输出的txt文件字节数组转换成txt文件验证正确性
getFileByBytes(childrenFileBytesByFile, baseFilePath, "test1.txt");
}
/**
* 直接读取zip文件中的txt中的内容并且输出无乱码
*/
private static byte[] readZipFile(String file) {
byte[] bytes = null;
BufferedReader reader = null;
ZipInputStream zin = null;
try {
ZipFile zf = new ZipFile(file, Charset.forName("GBK"));
InputStream in = new BufferedInputStream(new FileInputStream(file));
zin = new ZipInputStream(in, Charset.forName("GBK"));
ZipEntry ze = null;
InputStream fis = null;
while ((ze = zin.getNextEntry()) != null) {
if (!ze.isDirectory() && !ze.toString().startsWith("__MACOSX")) {
long size = ze.getSize();
if (size > 0) {
//整个代码部分最核心的部分就是这个地方很多乱码的就是这个地方的输入流没有进行编码格式设置
reader = new BufferedReader(new InputStreamReader(zin, StandardCharsets.UTF_8));
fis = zf.getInputStream(ze);
bytes = new byte[file.length()];
fis.read(bytes);
}
}
}
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
}
}
if (null != zin) {
try {
zin.close();
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
}
}
}
return bytes;
}
/**
* 将文件转换成Byte数组
*/
private static byte[] getBytesByFile(String pathStr) {
File file = new File(pathStr);
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
byte[] data = bos.toByteArray();
bos.close();
return data;
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
}
return null;
}
/**
* 将Byte数组转换成文件
*/
private static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
BufferedOutputStream bos = null;
FileOutputStream fos = null;
try {
File dir = new File(filePath);
if (!dir.exists()) {// 判断文件目录是否存在
dir.mkdirs();
}
File file = new File(filePath + File.separator + fileName);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
} finally {
if (null != bos) {
try {
bos.close();
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
}
}
if (null != fos) {
try {
fos.close();
} catch (IOException e) {
LOG.info("exception:{}", e.getMessage());
}
}
}
}
}
zip文件与byte[]转换
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 点击按钮进入系统文件管理器 Intent intent =new Intent(Intent.ACTION_GET...
- 首先运行以下代码,它会把当前目录下所有的.ui文件转换成.py文件 然后将ui装载进你的主程序 初学做的有点丑,请见谅
- 有人在这里会问,PDF转换器是什么?在这里告诉大家的是它是能将电脑中保存的文件格式转换为其它格式的辅助工具。那它转...
- 大家知道如何对WPS文件格式进行转换吗?WPS文件怎样才能转换成word格式呢?不用担心,下面就由小编教大家如何使...