gpt4 book ai didi

java - getRuntime().exec() 什么都不做

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:03 27 4
gpt4 key购买 nike

我想要一个 java 程序来执行以下 shell 命令:

apktool.jar d/path/to/my/app.apk

当直接在命令行上执行时,此命令非常有效。

Java 代码:

public static void main(String[] args) {

String command = "apktool d /path/to/my/app.apk";
try {
Runtime.getRuntime().exec(command);
} catch (IOException e1) {
e1.printStackTrace();
}
}

没有错误,没有异常。没有任何反应,我的印象是我已经在整个互联网上搜索了解决方案。有人知道我做错了什么吗?一个简单的命令,如

mkdir/path/to/a/new/folder

工作没有问题。

我使用 ProcessBuilder 进行了同样的尝试:

try {
Process process = new ProcessBuilder(command).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

这次我只得到“无法运行程序“apktool d/path/to/my/app.apk,没有那个文件或目录”。我什至无法运行mkdir命令。

最佳答案

您需要使用 java.exe 调用 jar,而您并没有这样做。此外,您还需要捕获流程中的输入和错误流,这是您无法按照运行方式执行的操作。请改用 ProcessBuilder,获取您的流,然后运行流程。

例如(我只能做Windows的例子),

import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class ProcessEg {
private static Process p;

public static void main(String[] args) {
String[] commands = {"cmd", "/c", "dir"};
ProcessBuilder pBuilder = new ProcessBuilder(commands);
pBuilder.redirectErrorStream();

try {
p = pBuilder.start();
InputStream in = p.getInputStream();
final Scanner scanner = new Scanner(in);
new Thread(new Runnable() {
public void run() {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
try {
int result = p.waitFor();
p.destroy();
System.out.println("exit result: " + result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

关于java - getRuntime().exec() 什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com