有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

执行cmd从Windows上运行的java程序获取Android AVD列表时出错

我试图通过执行以下命令来获取我机器中已安装AVD的列表:

try {

    String exeCmd = sdkPath + "/tools/bin/avdmanager list avd";

    Process process = Runtime.getRuntime().exec(exeCmd);
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

} catch (IOException e) {
    e.printStackTrace();
}
    

运行完这段代码后,我阅读输入,看看是否有模拟器要启动

这段代码在Mac上执行程序时运行良好,但在Windows上运行时抛出IOException,如下所示:

java.io.IOException: Cannot run program "C:\Users\Myname\AppData\Local\Android\Sdk/tools/bin/avdmanager": CreateProcess error=2, The system cannot find the file specified (...)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:444)
    at java.lang.ProcessImpl.start(ProcessImpl.java:139)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 7 more

有人能帮我解决这个问题或给我一个解决方案吗


共 (1) 个答案

  1. # 1 楼答案

    欢迎费尔南多

    该代码同时使用Windows和Unix目录样式,因此最终会得到如下Windows路径:"C:\Users\Myname\AppData\Local\Android\Sdk/tools/bin/avdmanager"

    您可以同时看到\/。由于您的Mac基于unix,sdkPath将解析为带有/分隔符的路径

    要使代码可移植(无论是否用于基于Unix的操作系统),请使用File.separator而不是/。这样,JVM将根据底层操作系统生成正确的分隔符

    try {
    
        String exeCmd = sdkPath + File.separator + "tools" + File.separator "bin" + File.separator + "avdmanager list avd";
    
        Process process = Runtime.getRuntime().exec(exeCmd);
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
    
    } catch (IOException e) {
            e.printStackTrace();
    }
    

    您可以通过使用不同的API生成路径使其更美观来改进此功能,但至少您了解了它的要点