Java Runtime.getRuntime().exec()含空格路径报错求助
问题分析与解决方案
问题根源
你遇到的问题是因为Runtime.getRuntime().exec(String)方法会将传入的字符串按空格、制表符等空白字符分割成命令和参数列表。路径里的Start Menu空格被当成了分隔符,导致系统尝试执行C:\ProgramData\Microsoft\Windows\Start这个不存在的程序,自然抛出找不到文件的异常。
解决方法
有两种可靠的方式处理带空格的路径:
1. 使用字符串数组重载方法(推荐)
直接将完整路径作为数组的唯一元素传入,方法会将数组每个元素视为独立的命令/参数,不会拆分空格:
Process process = Runtime.getRuntime().exec(new String[]{"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Firefox.exe"});
如果需要给程序传参数,只需在数组中追加后续元素即可,比如:
Process process = Runtime.getRuntime().exec(new String[]{ "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Firefox.exe", "--private-window" });
2. 用转义双引号包裹路径
在Java字符串中用\"转义双引号,将整个路径包裹起来,让exec方法识别为单个整体:
Process process = Runtime.getRuntime().exec("\"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Firefox.exe\"");
注意
相比第二种方法,字符串数组的方式更稳定,尤其当路径包含其他特殊字符或需要传递复杂参数时,能避免解析错误。
内容的提问来源于stack exchange,提问作者Gaby Zech
相关产品推荐
相关产品推荐

