最近由于需要处理xml文件。在读取文件的时候遇到了一些问题。
出现问题原因:文件的路径有误导致读不到文件。
这是因为我为了图方便,直接从windows复制文件的路径,导致了以下的错误:
org.dom4j.DocumentException:Nested exception (文件名、目录名或卷标语法不正确。)
类似的错误比如:
java.io.FileNotFoundException: C:\Test\tst.xml (文件名、目录名或卷标语法不正确。)
也可能是这个原因。
文件路径为什么有误呢?是因为字符串中含有隐藏的字符。
接下来,将演示找到隐藏的字符并删除,恢复我们期望的路径。
主要利用到
String yourPath = "C:\XXX\xxx";
String yourPathDeleteHidenChar = yourPath.replaceAll("\\p{C}", "");
从windows->文件属性->安全 : 复制的路径作为字符串,会含有隐藏的空格!
自己手工打的路径就没有
public static void main(String[] args) throws IOException {
//直接从windows文件属性->安全:复制的路径
String filePathWindow = "C:\\Test\\tst.xml";
//纯手打的路径
String filePathHandJob = "C:\\Test\\tst.xml";
System.out.println(filePathWindow);
System.out.println(filePathHandJob);
System.out.println("判断两个字符串是否相同 :"+filePathWindow.equals(filePathHandJob));
System.out.println("windows复制的字符串长度: "+filePathHandJob.length());
System.out.println("手动打的字符串长度: "+filePathWindow.length());
//将两者转换为字符数组
char[] filePathWindowArray = filePathWindow.toCharArray();
char[] filePathHandArray = filePathHandJob.toCharArray();
//获取被隐藏的字符
for (int i = 0; i < filePathWindowArray.length; i++) {
System.out.print("["+filePathWindowArray[i]+"]");
}
System.out.println();
for (int i = 0; i < filePathHandArray.length; i++) {
System.out.print("["+filePathHandArray[i]+"]");
}
System.out.println();
//解决办法
System.out.println("=======================解决办法=======================");
String filePathWindowsDeletHidenChar = filePathWindow.replaceAll("\\p{C}", "");
char[] filePathWindowsDeletHidenCharArray = filePathWindowsDeletHidenChar.toCharArray();
for (int i = 0; i < filePathWindowsDeletHidenCharArray.length; i++) {
System.out.print("["+filePathWindowsDeletHidenCharArray[i]+"]");
}
System.out.println();
//file1删除了隐藏字符,file2没有删除隐藏字符
File file1 = new File(filePathWindowsDeletHidenChar);
File file2 = new File(filePathWindow);
SAXReader reader = new SAXReader();
try {
//document1删除了隐藏字符,document2未删除隐藏字符
Document document1 = reader.read(file1);
// Document document2 = reader.read(file2);
System.out.println("读取文件成功");
} catch (DocumentException e) {
System.out.println("读取文件失败");
e.printStackTrace();
}
}
如果要运行代码,请导入相关的包,并创建相应路径下的文件。