需求:在unix系统上实现压缩和解压缩(可能会是目录的压缩).本人对于unix系统不熟悉,zip格式不知道在unxi可否???一般在unix系统上都用什么格式来进行压缩和解压缩呢?是否支持目录?

解决方案 »

  1.   

    我有这方面的代码,可惜处理中文文件名时会出错。
    你也可以直接调用java下的jar命令来完成压缩和解压。
      

  2.   

    处理中文可以通过转16进制完成
    我要在程序中实现压缩解压缩的过程
    您的程序支持gz的目录级压缩、解压缩不?
    如果支持,可否发给我一份?
    [email protected]
      

  3.   

    import java.util.*;
    import java.util.zip.*;
    import java.io.*;
    import javax.swing.*;public class Tests
    {
    public static void main(String args[])
    {
      System.out.println("请输入要保存的压缩文件名,例:test.zip:");
      try
      {
      BufferedReader buffin = new BufferedReader(new InputStreamReader(System.in));
      String fileSource = buffin.readLine();
      while(fileSource == "" || fileSource.length() == 0)
      {
      System.out.println("输入错误,请重新输入:");
      fileSource = buffin.readLine();
      }
      
      File files = new File(fileSource);
         FileOutputStream fout = new FileOutputStream(files);
         CheckedOutputStream cout = new CheckedOutputStream(fout,new Adler32());
          BufferedInputStream bin = null;
          ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(cout));
         ZipEntry ze;
         System.out.println("输入要压缩的文件列表,以空格;逗号分隔:"); 
         String fileAdd = buffin.readLine();
      while(fileAdd == "" || fileAdd.length() == 0)
      {  
         System.out.println("输入错误,请重新输入:");
         fileAdd = buffin.readLine();
      }
      
      StringTokenizer fenxi = new StringTokenizer(fileAdd," ,");  
          while(fenxi.hasMoreTokens())
          {
          String fs = fenxi.nextToken();
      zout.putNextEntry(new ZipEntry(fs));
      int c;
      bin = new BufferedInputStream(new FileInputStream(fs));
      while((c = bin.read()) != -1)
      zout.write(c);
      bin.close();
      }
      zout.close(); 
      buffin.close();
      System.out.println("压缩成功!");
    }catch(Exception e){System.out.println("错误!");}
    }
    }
    编译运行没问题了,只是只能处理当前目录下的文件,
    加个界面,处理就方便了,参考下
      

  4.   

    public void gZip(String filePath) {
    try {
    zip(StringUtils.prepareStringZIP(),new File(filePath));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }private void zip(String zipFilePath, File inputFile) throws Exception {
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath));
    zip(zos, inputFile, "");
    zos.close();
    }private void zip(ZipOutputStream zos, File file, String base) throws Exception {
    if ( file.isDirectory() ) {
    File[] files = file.listFiles();
    zos.putNextEntry(new ZipEntry(base + "/"));
    base = base.length() == 0 ? "" : base + "/";
    for (int i = 0; i < files.length; i++) {
    zip(zos, files[i], base + files[i].getName());
    }
    } else {
    zos.putNextEntry(new ZipEntry(base));
    FileInputStream in = new FileInputStream(file);
    int b;
    while ( (b = in.read()) != -1) {
    zos.write(b);
    }
    in.close();
    }
    }