getRuntime()。exec()什么都不做

空值

我想要一个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 /路径/到/一个/新/文件夹

没有问题的作品。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章