我如何处理参数中的空格?

我的应用程序启动并加载文件,如果我这样做: myApp /file:c:\nospaces.asdcmd但如果我做myApp /file:c:\with spaces.asd它不会工作,因为该程序收到两个参数myApp /file:c:\withspaces.asd

我知道我可以做我的应用程序myApp "/file:c:\with spaces.asd" ,它会像这样从cmd 。 然而,这不是一个好的解决scheme,因为如果我双击.asd文件(自定义扩展名)(并select与我的应用程序启动),那么main不会获取参数作为一行,而是两个参数。

我怎么能解决这个问题,以便我的main收到只有一个参数时,双击文件?

如果找不到文件,可以将参数连接在一起。 像这样的东西:

 public static void main(String[] args) { String fileName = joinArgumentsToValidFileName(args); } public static String joinArgumentsToValidFileName(String[] args) { if(args.length == 0) { return ""; } String fileName = args[0]; int index = 1; while(!new File(fileName).exists() && index < args.length) { fileName += " " + args[index]; index++; } return fileName; } 

这假定第一个参数(或参数)必须是文件名。 任何额外的agruments可以通过以某种方式记住偏移量索引来评估(不包括在上面的代码中)。

但是请注意:这是一个将参数传递给应用程序的非标准行为,可能导致cunfusion。 所以如果你找到一个方法来传递一个""包装文件名参数,不要这样做!

双击启动java将受到与Windows注册表相关的Windows注册表中的jar文件启动命令的影响。

这些是一些类似的问题,你可以看看:

在Windows上运行JAR文件

java可以从cmd运行jar,但不能通过双击运行

他们提到了确保在注册表c:\...\javaw.exe" -jar "%1" %的可执行文件后面带有通配符的有用部分c:\...\javaw.exe" -jar "%1" %