Java 在特定目录中运行Inix命令

Java 在特定目录中运行Inix命令,java,unix,runtime.exec,Java,Unix,Runtime.exec,我想使用Kava解压特定目录和子目录中的所有文件。 如果我打开终端,我可以使用: find . -name '*.zip' -exec unzip {} \\ public void unzip() { try { Runtime unzipProcess = Runtime.getRuntime(); unzipProcess.exec("find . -name '*.zip' -exec unzip {} \\"); } catch(Exception e

我想使用Kava解压特定目录和子目录中的所有文件。 如果我打开终端,我可以使用:

find . -name '*.zip' -exec unzip {} \\
public void unzip() {
    try {
    Runtime unzipProcess = Runtime.getRuntime();
    unzipProcess.exec("find . -name '*.zip' -exec unzip {} \\");
    } catch(Exception e) {
        System.out.println(e.getMessage());
    }
}
我想在Java应用程序中的某个点和某个目录中运行它,因此我使用以下方法:

find . -name '*.zip' -exec unzip {} \\
public void unzip() {
    try {
    Runtime unzipProcess = Runtime.getRuntime();
    unzipProcess.exec("find . -name '*.zip' -exec unzip {} \\");
    } catch(Exception e) {
        System.out.println(e.getMessage());
    }
}
这是我的。如果它的工作与否,我不知道,因为我不能设置工作目录。 我需要能够做一些类似于解压缩进程的事情。setWorkingDirectory/Users/abc/。 但当然这种方法并不存在,我认为我做错了什么

如何在特定目录中运行此命令?

您可以将find参数更改为所需的目录find/Users/abc-name'*.zip'-exec unzip{}\

或者按照Joachim Sauer的建议,切换到ProcessBuilder类。

您可以将find参数更改为所需的目录find/Users/abc-name'*.zip'-exec unzip{}\

或者按照Joachim Sauer的建议,切换到ProcessBuilder类。

您需要

使用并将所需的工作目录作为文件参数或 呼叫前切换到并呼叫。 我个人强烈建议使用ProcessBuilder,因为它有更好的API

一般来说,我建议阅读有关common Runtime.exec陷阱的信息,大多数信息同样适用于较新的ProcessBuilder API

使用并将所需的工作目录作为文件参数或 呼叫前切换到并呼叫。 我个人强烈建议使用ProcessBuilder,因为它有更好的API


一般来说,我建议阅读有关common Runtime.exec traps的信息。大多数信息同样适用于较新的ProcessBuilder API

在命令中,您可以提供[-d exdir]参数,并且exdir将具有解压缩文件。

在命令中,您可以提供[-d exdir]参数和exdir将具有解压缩文件。

为什么不替换起始目录。在“查找”命令中:

public void unzip(String workingDrirectory) {
  try {
    Runtime unzipProcess = Runtime.getRuntime();
    unzipProcess.exec("find " + workingDrirectory + " -name '*.zip' -exec unzip {} \\");
  } catch(Exception e) {
    System.out.println(e.getMessage());
  }
}

为什么不替换起始目录呢。在“查找”命令中:

public void unzip(String workingDrirectory) {
  try {
    Runtime unzipProcess = Runtime.getRuntime();
    unzipProcess.exec("find " + workingDrirectory + " -name '*.zip' -exec unzip {} \\");
  } catch(Exception e) {
    System.out.println(e.getMessage());
  }
}

我认为CDC是一个内置命令,不能用作程序。是的,你是对的,shell没有被调用。他仍然可以调用shell并使用-c选项传递要执行的命令,如bash-c'cd/dir;“找到…”但这不是一个很好的解决方案-我认为CDC是一个内置命令,不能用作程序。是的,你是对的,shell没有被调用。他仍然可以调用shell并使用-c选项传递要执行的命令,如bash-c'cd/dir;“找到…”但这不是一个很好的解决方案-谢谢,这似乎是我问题的答案。我似乎仍然有一些问题,因为它没有解压缩,但我认为这是一个不同的问题。@user1068470:很可能你现在遇到的问题在我上面提到的文章中已经提到并解释过了。读一下,很值得。谢谢,这似乎是我问题的答案。我似乎仍然有一些问题,因为它没有解压缩,但我认为这是一个不同的问题。@user1068470:很可能你现在遇到的问题在我上面提到的文章中已经提到并解释过了。读一读,它是值得的。大写的卡瓦让我成为了rotfl:大写的卡瓦让我成为rotfl: