保持目录结构压缩? 要是在Linux下用的话就调用shell好了。我做过一个压缩几个文件到一个zip中的小东东。

解决方案 »

  1.   

    我是做win下的应用
    要跟别的系统数据对接。
    那个系统倒出的数据是用zip格式打包的
    我还要导出我的数据让他可以输入!!!
    现在我可以读到他的数据了,但是不懂压缩zip包倒入他的系统!!
      

  2.   

    没听懂你的意思,是不是要把你的文件加入到已有的zip文件中?我只做过把几个文件压缩成一个zip文件。
      

  3.   

    对我就是要把几个文件压缩到一个zip文件里
      

  4.   

    其实很容易做的,如果有时间当然可以给你做一个,但是我现在比较忙。这样吧,我告诉你怎么实现,这是加入一个文件到zip中的:
                                ZipEntry ze = new ZipEntry( 文件名);

    // Initialize entry with the current time.
    ze.setTime( System.currentTimeMillis() );

    // These statements are for demonstrative purposes 
    // and not necessary.
    ze.setMethod(ZipEntry.DEFLATED);
    ze.setExtra(new byte[]{(byte)'X'});

    // Add the zip entry.
    jos.putNextEntry(ze);

    // Now write the zip entry data.

    jos.write( 文件的内容 );

    // will close the zip entry.
    jos.closeEntry();
    剩下的就是写一个递归程序遍历整个目录了
      

  5.   

    代码:
    /*
    Use: java ZipFiles zipFileName file1 file2 file3 file4 ...
    */
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;public class ZipFiles
    {
    public static void main(String[] args)
    {
    int i=0;
    if((args.length<2)||(args.length>20))
    {
    System.out.println("Use: java ZipFiles zipFileName file1 file2 file3 file4 ...");
    System.out.println("files number can not be larger than 20!");
    System.exit(0);
    }

    //取得待压缩的文件名
    String s_zipName=args[0];
    String[] s_files_will_be_ziped=new String[20];
    int i_count_will_be_ziped_files=args.length-1;
    for(i=1;i<args.length;i++)
    {
    s_files_will_be_ziped[i-1]=args[i];
    }

    //print
    System.out.println("below files will be ziped!");
    for(i=0;i<i_count_will_be_ziped_files;i++)
    System.out.println("file---->"+s_files_will_be_ziped[i]);

    //压缩
    System.out.println("compressing... ... ...");
    System.out.println("compressed "+zip_files(s_files_will_be_ziped,i_count_will_be_ziped_files,s_zipName)+" files");

    } //end main



    /* method zip_files() :  version 1.2  2001/07/05  */
    static int zip_files(String[] s_temp,int i_count_files,String s_ziped_fileName)
    {
    String s_current_path_fileName=""; //带路径的文件名
    String s_current_fileName=""; //不带路径的文件名
    String[] s_fileNames=new String[100];
    byte[] buffer=new byte[1024]; //为读入文件分配缓冲区
    int bytesRead=0; //读输入文件的字节数
    int i=0;

    //先做一些校验工作----------------------------------------
    try
    {
    if((i_count_files<=0)||(i_count_files>99)||(!(s_ziped_fileName.endsWith(".zip"))))
    return 0;
    //检验待压缩的文件是否正确
    int j=0;
    for(i=0;i<i_count_files;i++)
    {
    File f_test=new File(s_temp[i]);
    if(f_test.isFile())
    {
    s_fileNames[j]=s_temp[i];
    j++;
    }
    }
    i_count_files=j;
    }
    catch(Exception ee_345)
    {
    return 0;
    }

    //正式开始压缩--------------------------------------------
    try
    {
    ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(s_ziped_fileName));

    //使用一个循环,得到用户需压缩的所有文件
    for(i=0;i<i_count_files;i++)
    {
    //得到需压缩的文件名
    s_current_path_fileName=s_fileNames[i];
    //打开文件
    FileInputStream in=new FileInputStream(s_current_path_fileName);
    //创建一个zip文件记录,并将其增加到zip文件中
    File f_ttt=new File(s_current_path_fileName);
    s_current_fileName=f_ttt.getName(); //生成不带路径的文件名
    ZipEntry entry=new ZipEntry(s_current_fileName); 
    zip.putNextEntry(entry); //zip文件中再加入一项
    //从文件中读数据并增加到zip文件中
    while((bytesRead=in.read(buffer))!=-1)
    zip.write(buffer,0,bytesRead);
    //显示结果
    //System.out.println(entry.getName()+" added.");
    in.close();
    } //end for
    zip.close();
    //System.out.println("zip file "+zipName+" created.");
    return i_count_files;
    }
    catch(Exception ex)
    {
    //System.out.println(ex);
    return 0;
    }
    } //end zip_files()


    } //end class ZipFiles