Command to unzip a specific folder using 7zip

こ雲淡風輕ζ 提交于 2019-12-13 05:03:20

问题


I am working with windows to be more specific, I am invoking the cmd Command from java program using process and getRuntime().exec(). I tried options like -r but its not working. I tried the code line

Process proc = prog.exec(System.getenv("ProgramFiles").concat("\\7-Zip\\7z x " + "\""+inputZIPFile+"\""+ " -o"+outputFolder+"SpecificFolder\\* -r"));

Thanks in advance


回答1:


Start by using ProcessBuilder instead. It handles parameters with spaces better and allows you do things like redirect the output stream and specify the starting directory for the command...

public static void main(String[] args) {
    ProcessBuilder pb = new ProcessBuilder(
        System.getenv("ProgramFiles") + "/7-Zip/7z.exe",
            "x",
            inputZIPFile,
            "-o" + outputFolder+"/SpecificFolder",
            "-r"
    );
    pb.redirectError();
    try {
        Process p = pb.start();
        new Thread(new InputConsumer(p.getInputStream())).start();
        System.out.println("Exited with: " + p.waitFor());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public static  class InputConsumer implements Runnable {
    private InputStream is;

    public InputConsumer(InputStream is) {
        this.is = is;
    }

    @Override
    public void run() {
        try {
            int value = -1;
            while ((value = is.read()) != -1) {
                System.out.print((char) value);
            }
        } catch (IOException exp) {
            exp.printStackTrace();
        }
        System.out.println("");
    }

}

You might also want to consider Apache Commons Compress which provides read support for 7zip




回答2:


Why not unzip using java? From Compressing and Decompressing Data Using Java APIs:

import java.io.*;
import java.util.zip.*;

public class UnZip {
   final int BUFFER = 2048;
   public static void main (String argv[]) {
      try {
         BufferedOutputStream dest = null;
         FileInputStream fis = new 
       FileInputStream(argv[0]);
         ZipInputStream zis = new 
       ZipInputStream(new BufferedInputStream(fis));
         ZipEntry entry;
         while((entry = zis.getNextEntry()) != null) {
            System.out.println("Extracting: " +entry);
            int count;
            byte data[] = new byte[BUFFER];
            // write the files to the disk
            FileOutputStream fos = new 
          FileOutputStream(entry.getName());
            dest = new 
              BufferedOutputStream(fos, BUFFER);
            while ((count = zis.read(data, 0, BUFFER)) 
              != -1) {
               dest.write(data, 0, count);
            }
            dest.flush();
            dest.close();
         }
         zis.close();
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}


来源:https://stackoverflow.com/questions/24523997/command-to-unzip-a-specific-folder-using-7zip

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!