使用Java读取名称中带有空格的文件?

使用Java读取名称中带有空格的文件?,java,path,Java,Path,文件的原始名称是1001000042.jpg。我有一个问题: java.net.URISyntaxException: Illegal character in path at index 49: file:///opt/storage/user-data/attachments/1_00100\ 0042.jpg 你能给我一些解决方案吗?如何使用这个坏路径获取这个文件?我知道C#有路径类。Java中有类似的东西吗 我尝试执行下一步,但未成功: 私有字符串替换空白(String str){ i

文件的原始名称是
1001000042.jpg
。我有一个问题:

java.net.URISyntaxException: Illegal character in path at index 49: file:///opt/storage/user-data/attachments/1_00100\ 0042.jpg
你能给我一些解决方案吗?如何使用这个坏路径获取这个文件?我知道C#有路径类。Java中有类似的东西吗

我尝试执行下一步,但未成功:

私有字符串替换空白(String str){
if(str.contains(“”){
str=str.replace(“,“%20”);
}
返回str;
}

使用文件,它与空格一起工作:

String path = "file:///opt/storage/user-data/attachments/1_00100\\ 0042.jpg";
File f = new File(path);
如果要用%20替换空格,请使用正则表达式:

path.replaceAll("\\u0020", "%20");

我不确定您从何处获得此路径,但我假设在添加空格之前添加了
\
以转义它,因此您需要更改方法以同时删除空格之前的
\

此外,由于此方法不影响类实例的状态,所以可以将其设置为静态

private static String replaceWhitespace(String str) {
    if (str.contains("\\ ")) {
        str = str.replace("\\ ", "%20");
    }
    return str;
}
演示:

输出:

/opt/storage/user-data/attachments/1_00100%200042.jpg
/opt/storage/user-data/attachments/1_00100 0042.jpg

给你:@Dawnkeeper标准Java(不是Android JDK)没有
Uri
,但是
Uri
类不幸的是没有
parse
方法。和朋友的可能重复。这与你想的不一样。例如,检查用户输入的
f.getName()
的结果file:///opt/storage/user-data/attachments/1_00100\\0042.jpg“。我不明白您所暴露的问题,有什么问题?您的代码将无法编译,因为Java中的
\
是特殊字符,需要额外的
\
才能成为文字,所以你需要把它写成
“\\”
。关于
getName()
的结果会发生奇怪的事情,因为在Java8中它只会是
0042.jpg
,而在Java7中我看到
1\u 00100\0042.jpg
(示例)。我不知道为什么会有这样的区别。哦,你是说逃跑,没错,我错过了,对不起,我会编辑它。
/opt/storage/user-data/attachments/1_00100%200042.jpg
/opt/storage/user-data/attachments/1_00100 0042.jpg