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
fromcmd
但是如果我这样做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文件一样,如果在名称中使用空格保存文件,则不会期望该文件失败。您可能需要修改注册表,以确保命令行参数用引号括起来。这些答案可能会有帮助:我会让我的生活变得轻松,并在创建文件时使空间非法。听起来你在这上面花了足够的时间。是的,这是我想到的一个很好的解决方法,但它只是有点太粗糙了。。。刚刚添加了一个注释:-)