Java ByteArrayOutputstream을 사용하여 파일을 압축하려고했지만 실패했습니다 .Ouputstream을 FileOutput 스트림으로 변경하면 작동 할 수 있습니다. 작동하도록하려면 어떻게해야합니까?Java로 파일 압축 ByteArrayOutputstream
여기 (내 영어가 너무 좋지 Sorrry) 내 코드입니다 :
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.FileUtils;
public class ZipOutputStreamTest {
public static void main(String args[]) throws IOException {
test1();
test2();
}
/*this failed, the exported file can't be open*/
public static void test1() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = genZip(baos);
byte[] bytes = baos.toByteArray();
FileUtils.writeByteArrayToFile(new File("d:\\test1.zip"), bytes);
FileOutputStream fos = new FileOutputStream(new File("d:\\test1.zip"));
for(byte b : bytes){
fos.write(b);
}
fos.close();
zos.close();
baos.close();
}
/*this can work*/
public static void test2() throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("d:\\test2.zip");
ZipOutputStream zos = genZip(fileOutputStream);
zos.close();
fileOutputStream.close();
}
public static ZipOutputStream genZip(OutputStream os) throws IOException{
ZipOutputStream zos = new ZipOutputStream(os, Charset.forName("gbk"));
for(int i=0;i<5;i++){
ZipEntry entry = new ZipEntry("ab"+i+".txt");
zos.putNextEntry(entry);
zos.write("中文asaf".getBytes());
zos.closeEntry();
}
return zos;
}
}
감사합니다!
당신의 도움을위한 탱크. 나는 test1()에서 FileOutputStream을 제거했지만 여전히 작동하지 않습니다. – showstone
흠, 흥미 롭습니다. 내 컴퓨터에 코드를 시작하고 예상 결과가 나타납니다. http://i.imgur.com/h6dQonL.png –