简体   繁体   中英

Command to unzip a specific folder using 7zip

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

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

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();
      }
   }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM