2011-11-30 4 views
0

5 개의 파일을 압축하는 방법이 있습니다. 그것은 오류없이 zip 파일을 생성하지만 내용을 검사하기 위해 열 수 없습니다. 이메일을 보내려고했지만 Gmail에서 손상된 파일을 보낼 수 없다고했습니다.이 우편 방법에 문제가 있습니까?

private void zipTestFiles() throws FileNotFoundException, IOException 
{ 
    File[] filenames = fileDir.listFiles(fileNameFilter(Constants.PAGE_MON_FILENAME_FILTER)); 

    byte[] buf = new byte[1024]; 

    String outFilename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separatorChar + Constants.PAGEMONITOR_ZIP; 
    DeflaterOutputStream out = new DeflaterOutputStream(new BufferedOutputStream(new FileOutputStream(outFilename))); 

    for (int i=0; i<filenames.length; i++) 
    { 
     FileInputStream in = new FileInputStream(filenames[i]); 

     int len; 
     while ((len = in.read(buf)) > 0) 
     { 
      out.write(buf, 0, len); 
     } 

     in.close(); 
     } 
    out.close(); 
} 
+0

하나의 파일을 압축하기 위해이 파일을 사용해 보셨습니까? – ethan

+0

ZIP 파일은 압축 된 표현이며 일부 머리글입니다. 아마 여러분의 응용 프로그램은 전자를 생성하지만 후자는 놓치기 때문에 오류가 발생합니다. 나는 @ AlexR의 답변이 맞는 것 같아. – akappa

+0

@akappa 그것은 참으로 ... – barry

답변

3

당신은 ZipOutputStream을 사용해야합니다

보관이는 방법입니다

중 알 수없는 형식 또는 손상된 : Windows에서 WinRar를 함께 열 것을 시도라는 오류가 발생합니다 DeflaterOutputStream 대신. 그리고 엔트리를 만드는 것을 잊지 마십시오. 구현을 작성하기 전에 ZipOutputStream의 javadoc을 읽으십시오.

+0

감사합니다. Alex. 실제로 주말에 ZipOutputStream을 사용하여 작업했지만 .setMethod() (.setMethod (ZipOutputStream.STORED);를 실험 할 때 CRC 불일치가 계속 발생 함)에 문제가있어서 DeflateOutputStream을 시도해 보았습니다. 모두 일하고있어. – barry

3

Java에 이미 존재하는 ZipOutputStream을 사용해보십시오. DeflaterOutputStream은 DEFLATE 메서드 만 사용하여 압축하지만 ZIP 헤더는 자동으로 삽입하지 않습니다.

+0

감사합니다. – barry

관련 문제