org.dom4j.DocumentException:Nested exception (文件名、目录名或卷标语法不正确。) 解决办法

最近由于需要处理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();
		}
}

 

 如果要运行代码,请导入相关的包,并创建相应路径下的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值