关于网友提出的“ ZipOutpuStream压缩文件问题,急需解决……”问题疑问,本网通过在网上对“ ZipOutpuStream压缩文件问题,急需解决……”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: ZipOutpuStream压缩文件问题,急需解决……
描述: 刚使用org.apache.tools.zip.ZipOutputStream 做了压缩打包下载功能,功能是实现了,不过发现压缩后的rar包打开后会提示winrar诊断错误,但是解压后压缩的文件都能打开没有损坏。不知为何会提示有文件损坏。请大家帮忙看看怎么解决这问题!先谢谢了
下边是代码:
//压缩包输出流
ZipOutputStream zipStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipStream.setEncoding(Constants.FILEUPLOAD_ENCODING);
//查找附件
DataList attsList = attHandler.findAttsByPackageId(pckId, code, fields, conn);
for (int j = 0; j < attsList.size(); j++) {
Data att = attsList.getData(j);
BufferedInputStream in2 = null;
//如果是磁盘类型从磁盘下载
if(AttType.SELECT_VALUE_FIRST == attType.getInt(AttType.STORE_TYPE)){
File file = new File(att.getString(Att.FILESYSTEM_PATH),att.getString(Att.RANDOM_NAME));
in2 = new BufferedInputStream(new FileInputStream(file));
}else{
//获得附件内容
String sql = "SELECT ATT_CONTENT FROM " + attType.getString(AttType.ENTITY_NAME) + " WHERE ID = '"+att.getString(Att.ID)+"'";
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
InputStream stream = null;
if (rs.next()) {
stream = rs.getBinaryStream(Att.ATT_CONTENT);
}
//封装
in2 = new BufferedInputStream(stream);
}
//添加压缩包文件
ZipEntry zipEntry = new ZipEntry(att.getString(Att.ATT_NAME));
zipStream.putNextEntry(zipEntry);
//读写
byte[] b = new byte[1024];
int len = 0;
while ((len = in2.read(b)) != -1) {
zipStream.write(b, 0, len);
b = new byte[1024];
}
in2.close();
zipStream.closeEntry();
}
//打包关闭
zipStream.close();
下载后,打开压缩包会提示下图所示:
以上介绍了“ ZipOutpuStream压缩文件问题,急需解决……”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2125054.html