执行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 楼答案
欢迎费尔南多
该代码同时使用Windows和Unix目录样式,因此最终会得到如下Windows路径:
"C:\Users\Myname\AppData\Local\Android\Sdk/tools/bin/avdmanager"
您可以同时看到
\
和/
。由于您的Mac基于unix,sdkPath
将解析为带有/
分隔符的路径要使代码可移植(无论是否用于基于Unix的操作系统),请使用
File.separator
而不是/
。这样,JVM将根据底层操作系统生成正确的分隔符您可以通过使用不同的API生成路径使其更美观来改进此功能,但至少您了解了它的要点