将多个文件合并成zip文件的问题!

wallflower 2008-04-03 01:34:08
要求在程序当中生成两个csv文件,然后将其合并在一个zip文件里输出

目前是这样实现的:
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
FileOutputStream f = new FileOutputStream("c:\\test.zip");
CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());
ZipOutputStream zos = new ZipOutputStream(csum);
BufferedOutputStream out = new BufferedOutputStream(zos);
zos.setComment("A test of java zipping");

System.out.println("Writing file Father.java");

File tempFile = File.createTempFile("headerCSV", ".csv");
FileWriter fw = new FileWriter(tempFile);
fw.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh\r\n");
fw.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1\r\n");
fw.write("aaa\r\n");
fw.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2\r\n");
fw.close();
BufferedReader in1 = new BufferedReader(new FileReader(tempFile));
zos.putNextEntry(new ZipEntry(tempFile.getName()));
int b;
while ((b = in1.read()) != -1) {
out.write(b);
}
tempFile.delete();
in1.close();

File tempFile1 = File.createTempFile("DetailCSV", ".csv");
FileWriter fw2 = new FileWriter(tempFile1);
fw2.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh\r\n");
fw2.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1\r\n");
fw2.write("aaa\r\n");
fw2.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2\r\n");
fw2.close();

BufferedReader in2 = new BufferedReader(new FileReader(tempFile1));
zos.putNextEntry(new ZipEntry(tempFile1.getName()));
int c;
while ((c = in2.read()) != -1) {
out.write(c);
}
tempFile1.delete();
in2.close();

out.close();
}
结果是一个文件打开错误(估计是内容为空),而另一个文件里有两个文件的内容。另外,如何把临时文件名字当中的数字去掉?如DetailCSV1254.csv当中的1254是自动生成的
...全文
147 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cspider588 2008-04-03
  • 打赏
  • 举报
回复
首先,
ZipOutputStream zos = new ZipOutputStream(csum);
BufferedOutputStream out = new BufferedOutputStream(zos);
这两个你用反了,应该是
BufferedOutputStream out = new BufferedOutputStream(csum);
ZipOutputStream zos = new ZipOutputStream(out);

其次,File.createTempFile就是会加一些数字来确定你的文件名,但是这个应该不会造成问题
因为zos.putNextEntry(new ZipEntry(tempFile.getName()));里面的tempFile.getName()可以改成你想要的任何字符串作为文件名的啊

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧