JAVA程序命令行中有空格问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA程序命令行中有空格问题相关的知识,希望对你有一定的参考价值。

我写了个JAVA程序打开文本文档,并做成了EXE,双击文本文件时,就可以打开文本文件,但是当文本文件名路径中有空格时,就会得不到正确的文件路径名。
if (args[0] != null)
String string = args[0];



string.replace("\\", "\\\\");
me.openFile(string);

如果在命令行中输入参数,可以在文件名两侧加上引号,就可以解决文件路径中的空格问题,但是现在我要做成EXE,这种情况下怎么解决空格问题呢?
如果有正确答案后,我会追加悬赏。
三楼是明白我的意思了,呵呵。谢谢,你说的方法也是我现在用的方法。
采用把这些字符用空格连接起来的方法是不错的,只是当文件路径中的空格是两个的时候,怎么办?JAVA参数是忽略多个空格的。
我感觉应该有别的方法可以直接得到文件路径。

比如:
java Test a b
Test程序会收到两个参数"a"和"b",如果想要让它收到"a b",命令行可以改成
java Test "a b"

如果你不能编辑java运行的命令行,又很肯定你的程序只应该接收1个参数,可以在你的程序中进行处理:
if(args != null && args.length>0)
StringBuffer paramBuf = new StringBuffer(args[0]);
for(int i=1; i<args.length; ++i)
paramBuf.append(' ').append(args[i]);

String param = paramBuf.toString();
System.out.println(param);
else
System.out.println("please input filepath !");


回答补充:
请楼主尽可能采用我一开始提到的方法,这是最标准的。
如果你运行java的命令行是
java Test a b
JVM(即java.exe)得到的参数已经是
"Test"、"a"、"b"
即参数的分割不是JVM做的事情,是操作系统做的事情。JVM得到的参数已经是分割好了的,本身无能为力(也就是说,你无法通过给java命令行添加一些编译选项,使JVM将类名后面的字符串理解为一个整体的参数,因为JVM在得到这些参数时,已经被操作系统分割好了)。
而Windows的命令行,使用空白字符做分隔符,这一点没有办法更改(如果整个Windows系统的命令行分隔符所采用的字符被更改,恐怕大部分程序都不能正常运行了)。
参考技术A 可以参考

1, TestURL().class.getResource("").getPath()或TestURL().class.getResource("").getFile()获得的路径,不能被FileReader()和FileWriter()直接应用。
原因是URL对空格,特殊字符(%,#,[]等)和中文进行了编码处理。
例如:空格变为%20。
有解决方法(1),使用repaceAll("%20",' ')替换后,只能解决空格问题。但是路径中包含%和中文就不行了。
有解决方法(2),使用URLDecoder.decode(str,"UTF-8")解码,但是只能解决一部分,若路径中含有+,也是不能解决的,原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")编码的,+号被解码后,却变成了空格。
方法(3),可以解决所有的问题,用TestURL().class.getResource("").toURI().getPath(),但是需要处理URISyntaxException异常,比较麻烦点。
参考技术B 转义一下参数不就可以了嘛 参考技术C String的trim()去掉空格你试试(没太明白你要说什么)

问一下啊,以下程序出现了啥问题,为啥当输入字符串中有空格时,输出结果就有问题?

#include<stdio.h>
#include<string.h>
void main()

void concatenate(char string1[],char string2[],char string[]);
char s1[100],s2[100],s[100];
printf("please input string1:\n");
scanf("%s",s1);
printf("please input string2:\n");
scanf("%s",s2);
concatenate(s1,s2,s);
printf("The new string :\n %s\n",s);

void concatenate(char string1[],char string2[],char string[])

int i,j;
for(i=0;string1[i]!='\0';i++)
string[i]=string1[i];
for(j=0;string[j]!='\0';j++)
string[i+j]=string2[j];
string[i+j]='\0';

其实输出的不是空格,只不过需要占位,显示成空格了 比如:printf("%c%c%c%c%c",0,0,0,0,0);这样就会占用5个字符。 但是\\0在字符串中的用法追问

不很懂你的意思,可以再详细说一下吗?

参考技术A scanf 不接受空格
例子如下
wer342 3242 564
wer342
Press any key to continue

#include<stdio.h>
main()

char str[100]="\0";
scanf("%s",&str);
printf("%s\n",str);


如果要接收带空格的字符串 可以使用 gets()
123 3453 et etrt
123 3453 et etrt
Press any key to continue
#include<stdio.h>
main()

char str[100]="\0";
gets(str);
printf("%s\n",str);


有问题请追问 满意记得采纳
参考技术B 不知道啊~同问``

以上是关于JAVA程序命令行中有空格问题的主要内容,如果未能解决你的问题,请参考以下文章

刚学java, 有个问题,若java源文件名称中有空格,比如abc 123.java,这个java文件在命令行窗口怎么编译?

java执行shell命令中有空格的处理方法

eclipse Java工作空间 为啥说用有空格、中文的路径不好?

用java 编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件(夹)!

命令行中编译和运行JAVA程序出现“错误: 找不到或无法加载主类”

在命令行中制作一个java包