如何处理参数中的空格?

时间:2015-08-24 00:38:16

标签: java eclipse windows arguments

我的应用启动并加载文件,如果我这样做:myApp /file:c:\nospaces.asd来自cmd,但如果我myApp /file:c:\with spaces.asd它将无效,因为程序会收到两个参数:{{1} }和myApp /file:c:\with

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

如何解决此问题,以便双击文件时我的main只会收到一个参数?

2 个答案:

答案 0 :(得分:1)

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

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。因此,如果您找到了传递""包装文件名参数的方法,请不要这样做!

答案 1 :(得分:0)

双击启动java会受到在与Windows文件注册表相同的窗口中注册的jar文件启动命令的影响。

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

Running JAR file on Windows

java can run jar from cmd but not by double clicking

他们提到了有用的部分,确保您在注册表c:\...\javaw.exe" -jar "%1" %

中的可执行文件后面有通配符