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

Java 如何处理参数中的空格?,java,eclipse,windows,arguments,Java,Eclipse,Windows,Arguments,如果我这样做,我的应用程序将启动并加载文件:myApp/file:c:\nospaces.asdfromcmd但是如果我这样做myApp/file:c:\with spaces.asd它将不起作用,因为程序收到两个参数:myApp/file:c:\with和spaces.asd 我知道我可以做myApp”/file:c:\with spaces.asd“,它将在cmd中像这样工作。但是,这不是一个好的解决方案,因为如果我双击.asd文件(自定义扩展名)(并选择使用我的应用启动),那么main将不

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

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


如何解决此问题,使我的
main
在双击文件时只接收一个参数?

双击启动java会受到在windows中注册的与同一命令相关的内容的影响,即windows registry for jar file launch命令

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


它们提到了一个有用的部分,即确保您在注册表
c:\…\javaw.exe“-jar”%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;
}
publicstaticvoidmain(字符串[]args){
字符串文件名=joinArgumentsToValidFileName(args);
}
公共静态字符串joinArgumentsToValidFileName(字符串[]args){
如果(args.length==0){
返回“”;
}
字符串文件名=args[0];
int指数=1;
而(!new File(fileName).exists()&&index
这假设第一个参数(或多个参数)必须是文件名。可以通过某种方式记住偏移量索引(不包括在上面的代码中)来计算任何其他图形


但请注意:这不是向应用程序传递参数的标准行为,可能会导致cunfusion“
wrapped file name参数,不要这样做

从应用程序中删除空间filename@dasblinkenlight是的,但我只能在命令提示符下执行此操作,如果用户jsut双击该文件,则该操作将不起作用。@FirebladeDan这些文件可以由用户命名,因此它可以被称为任何名称,应该允许使用空格。与microsoft word文件一样,如果在名称中使用空格保存文件,则不会期望该文件失败。您可能需要修改注册表,以确保命令行参数用引号括起来。这些答案可能会有帮助:我会让我的生活变得轻松,并在创建文件时使空间非法。听起来你在这上面花了足够的时间。是的,这是我想到的一个很好的解决方法,但它只是有点太粗糙了。。。刚刚添加了一个注释:-)