要求在程序当中生成两个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是自动生成的
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是自动生成的
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()可以改成你想要的任何字符串作为文件名的啊