各位大侠,小弟现在在java中压缩文件时遇到如下问题:   
当我使用GZIPOutputStream时,生成压缩文件没问题,但里面的文件没有后缀,怎么解决呢? 
源代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;public class zip {    public static void main(String[] args) {
        
        int number; 
        String fileNm;
        String strykFlpth = "d:" + File.separator + "file.zip";
        byte[] buf=new byte[1024];
        
        for(int i=0; i<3; i++){
            fileNm = "c:" + File.separator + "file" + String.valueOf(i) + ".doc";
        try 
        { 
            FileInputStream fin = new FileInputStream(fileNm); 
            FileOutputStream fout=new FileOutputStream(strykFlpth); 
            GZIPOutputStream gzout=new GZIPOutputStream(fout); 
            while ((number = fin.read(buf)) != -1){
                gzout.write(buf,0,number); 
            }
            gzout.close(); 
            fout.close(); 
            fin.close(); 
         }
        catch(IOException e) 
        { 
            System.out.println(e.getMessage());
            System.exit(1);
        }
        }
        System.out.println("ok!");
    }
}

解决方案 »

  1.   

    最好用ZipOutputStream这个吧,改了你的,应该符合你的要求吧。import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;public class zip {    public static void main(String[] args) throws FileNotFoundException, IOException {        int number;
            String fileNm;
            String strykFlpth = "d:" + File.separator + "file.zip";
            byte[] buf = new byte[1024];
            FileOutputStream fout = new FileOutputStream(strykFlpth);
            ZipOutputStream gzout = new ZipOutputStream(fout);
            for (int i = 0; i < 3; i++) {
                fileNm = "c:" + File.separator + "file" + String.valueOf(i) + ".doc";
                try {
                    FileInputStream fin = new FileInputStream(fileNm);
                    gzout.putNextEntry(new ZipEntry("file" + String.valueOf(i) + ".doc"));//写新的条目
                    while ((number = fin.read(buf)) != -1) {
                        gzout.write(buf, 0, number);
                    }
                    gzout.closeEntry();//关闭当前 ZIP 条目并定位流以写入下一个条目。
                    fin.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                    System.exit(1);
                }
            }
            gzout.close();//关闭 ZIP 输出流和正在过滤的流。
            fout.close();
            System.out.println("ok!");
        }
    }