目录
一、问题描述:
为了方便,当我们要对文件进行处理时,都会选择复制电脑中的路径而不是手动输入。但有时,从文件属性窗口复制的路径中在Java程序中使用时竟然解析失败。
举个例子:我们从这里复制了一个文件路径~尝试编译解析
import java.io.File;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
//输入
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要复制的文件路径:");
File file1=new File(scanner.next());
System.out.println(file1.isFile());;
}
}
如图,明明是复制的路径(肯定比手写的靠谱吧hhh!!),竟然无法识别为一个文件。
二、查找原因:
这时我们能看到路径包含不可见的控制字符,路径前面有一个隐藏的Unicode控制字符 U+202A (LEFT-TO-RIGHT EMBEDDING)某些操作系统和应用程序在显示文件属性时,可能会在路径前后添加控制字符以正确显示文本方向。这在一些文本编辑器中是不可见的,但会影响路径的解析。
三、解决方案:
编写一个方法,先对路径过滤一遍:
private static String removeInvisibleCharacters(String input) {
if (input == null) {
return null;
}
return input.replaceAll("[\\p{C}\\p{Z}]", "");
}
}
正则表达式:\\p{C} 匹配所有控制字符,\\p{Z}`匹配所有空白字符。使用 replaceAll`方法去除这些字符。
如图:这时候从属性复制过去的路径,能正确识别了。