搞定了这个问题 就此纪念一下 呵呵!源代码呈上 请高手多多指点
主要实现功能是 按照条件一次性生成多个EXCEL 然后打包成一个ZIP文件 让用户直接下载ZIP文件
功能很简单 但中文问题困扰了我1小时左右 郁闷!!问题的关键在于实例化ZipOutputStream对象和ZipEntry对象时一定要用org.apache.tools.zip的 别用JAVA的
就这么简单 希望可以给需要的朋友有所帮助!!import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class ExExcel{
/**
* 实现多文件压缩(通用)
* @author JohnnyJu
* @since 2008-04-08
* @return 压缩文件名称
*/
private static String zipExcel(String mkdirPath,long timeA){ final int BUFFER = 2048;
String zipname = null;
String filename = null;
try {
BufferedInputStream origin = null;
String rarPath = AWFConfig._iworkConf.getDocumentPath();
if(!new File(rarPath+"tmp/group_/file_"+timeA+"/").isDirectory()){
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdir();
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdirs();
}
else{
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdirs();
}
zipname = rarPath+"tmp/group_/file_"+timeA+"/"+timeA+".zip";
filename = timeA+".zip";
FileOutputStream dest = new FileOutputStream(zipname);
//调用org.apache.tools.zip包实例化一个ZIP输出流并实例化缓冲区
org.apache.tools.zip.ZipOutputStream out = new org.apache.tools.zip.ZipOutputStream(new BufferedOutputStream(dest));
byte data[] = new byte[BUFFER];
File f = new File(mkdirPath); File files[] = f.listFiles();
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER);
//ZipEntry entry = new ZipEntry(files[i].getName());
//调用org.apache.tools.zip包输出ZIP文件
org.apache.tools.zip.ZipEntry entry = new org.apache.tools.zip.ZipEntry(files[i].getName());
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
out.write(data, 0, count);
}
//关闭输入流
origin.close();
}
//关闭ZIP输出流
out.close();
//System.out.println("压缩文件生成至:"+zipname);
//对生成的压缩文件进行加密
int zipMdFive = EncryptFileUtil.encryptFile(zipname);
} catch (Exception e) {
System.out.println("错误:"+e);
}
//return zipname;
return filename;
}
主要实现功能是 按照条件一次性生成多个EXCEL 然后打包成一个ZIP文件 让用户直接下载ZIP文件
功能很简单 但中文问题困扰了我1小时左右 郁闷!!问题的关键在于实例化ZipOutputStream对象和ZipEntry对象时一定要用org.apache.tools.zip的 别用JAVA的
就这么简单 希望可以给需要的朋友有所帮助!!import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class ExExcel{
/**
* 实现多文件压缩(通用)
* @author JohnnyJu
* @since 2008-04-08
* @return 压缩文件名称
*/
private static String zipExcel(String mkdirPath,long timeA){ final int BUFFER = 2048;
String zipname = null;
String filename = null;
try {
BufferedInputStream origin = null;
String rarPath = AWFConfig._iworkConf.getDocumentPath();
if(!new File(rarPath+"tmp/group_/file_"+timeA+"/").isDirectory()){
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdir();
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdirs();
}
else{
new File(rarPath+"tmp/group_/file_"+timeA+"/").mkdirs();
}
zipname = rarPath+"tmp/group_/file_"+timeA+"/"+timeA+".zip";
filename = timeA+".zip";
FileOutputStream dest = new FileOutputStream(zipname);
//调用org.apache.tools.zip包实例化一个ZIP输出流并实例化缓冲区
org.apache.tools.zip.ZipOutputStream out = new org.apache.tools.zip.ZipOutputStream(new BufferedOutputStream(dest));
byte data[] = new byte[BUFFER];
File f = new File(mkdirPath); File files[] = f.listFiles();
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER);
//ZipEntry entry = new ZipEntry(files[i].getName());
//调用org.apache.tools.zip包输出ZIP文件
org.apache.tools.zip.ZipEntry entry = new org.apache.tools.zip.ZipEntry(files[i].getName());
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
out.write(data, 0, count);
}
//关闭输入流
origin.close();
}
//关闭ZIP输出流
out.close();
//System.out.println("压缩文件生成至:"+zipname);
//对生成的压缩文件进行加密
int zipMdFive = EncryptFileUtil.encryptFile(zipname);
} catch (Exception e) {
System.out.println("错误:"+e);
}
//return zipname;
return filename;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货