linux下用dom4j写入xml时 报错java.io.FileNotFoundException..(没有那个文件或目录

在Linux环境下,使用dom4j写入XML文件时遇到java.io.FileNotFoundException,即使读取文件正常。问题出在路径含有空格,改为空格后文件仍无法加载。通过切换工作空间路径解决了该问题,确保路径无空格。最终成功写入XML文件。

今天在使用dom4j写入xml文件是报错:java.io.FileNotFoundException..(没有那个文件或目录)

但是我去读取文件时却是正常的,这时我想到了linux下的权限问题,所一我改了权限,再试,还是这个错误,百度一下,发现这种错误大多是路径不对或者文件名错误还有可能是文件不存在,在读取的时候却是正常的,这就可以排除这些问题了啊。但是我还是检查了一遍路径,发现,我的workspace路径下有空格我想肯定是这个问题了,于是将空格改为下划线,呵呵,文件加载不进来了,这下我想到的是改workspace,这个在file-->Switch WorkSpace-->Other,然后选择修改后的路径就ok了。

下面是我修改后的写入xml的java代码:

package hnist.com.xml01;

import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


public class xmlWrite {
	public static void main(String args[]){
		XMLWriter out = null;
		try {
			//先创建一个的document对象
			Document d = DocumentHelper.createDocument();
			//为d添加节点,并返回该节点
			Element root = d.addElement("users");
			//为根节点添加节点,并且返回添加的节点
			Element eu = root.addElement("user");
			//添加属性
			eu.addAttribute("id", "1");
			//添加其它节点
			eu.addElement("name").addText("张三");
			eu.addElement("sex").addText("男");
			eu.addElement("age").addText("20");
			eu = root.addElement("user");
			eu.addAttribute("id", "2");
			eu.addElement("name").addText("李四");
			eu.addElement("sex").addText("女");
			eu.addElement("age").addText("19");
			eu = root.addElement("user");
			eu.addAttribute("id", "3");
			eu.addElement("name").addText("王五");
			eu.addElement("sex").addText("男");
			eu.addElement("age").addText("22");
			//获取xml文件所在的路径
			String path = xmlWrite.class.getClassLoader().getResource("xml/user.xml").getPath();
			//项目中不用替换
			path = path.replace("bin", "src");
			System.out.println(path);
			//创建xmlWriter来写数据
			out = new XMLWriter(new FileWriter(path), OutputFormat.createPrettyPrint());
			//将节点写入到xml文件中
			out.write(d);
			System.out.println("写入成功!");
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				if(out != null) out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


运行结果为:

/home/long/Workspaces/MyEclipse_Professional_2014/xml01/src/xml/user.xml
写入成功!


user.xml中为:

<?xml version="1.0" encoding="UTF-8"?>

<users>
  <user id="1">
    <name>张三</name>
    <sex>男</sex>
    <age>20</age>
  </user>
  <user id="2">
    <name>李四</name>
    <sex>女</sex>
    <age>19</age>
  </user>
  <user id="3">
    <name>王五</name>
    <sex>男</sex>
    <age>22</age>
  </user>
</users>

读取user.xml的java代码:
package hnist.com.xml01;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class xmlXpath {
	public static void main(String args[]){
		SAXReader reader = new SAXReader();
		try {
			String path = xml01.class.getClassLoader().getResource("xml/user.xml").getPath();
			System.out.println("path = "+path);
			Document d = reader.read(path);
			Element root = d.getRootElement();
			//相对路径查找
			List<Element> eles = root.selectNodes("user");
			System.out.println(eles);
			//绝对路径查找,从根节点users查找user,而不会查找user下的节点
			eles = root.selectNodes("/users/user");
			System.out.println("包含节点个数:"+eles.size()+" : "+eles);
			//查找所有性别为男的姓名
			System.out.println("----------------------------------");
			eles = root.selectNodes("/users/user[sex='男']");
			for(Element e:eles){
				System.out.println("性别为男:"+e.elementText("name"));
			}
			System.out.println("----------------------------------");
			//查找age<=20的姓名
			eles = root.selectNodes("/users/user[@id<=2]");
			for(Element e:eles){
				System.out.println("id<=2 :"+e.elementText("name"));
			}
			System.out.println("----------------------------------");
			//查找名称中包含有'张'的age节点
			eles = root.selectNodes("/users/user[contains(name,'张')]/age");
			for(Element e:eles){
				System.out.println("名称中包含有'张'的age节点:"+e.getTextTrim());
			}
			System.out.println("----------------------------------");
			//查找age<=20并且sex='女'的name
			eles = root.selectNodes("/users/user[age<=20 and sex='女']/name");
			for(Element e:eles){
				System.out.println("age<=20并且sex='女'的name :"+e.getTextTrim());
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
}

运行结果为:

path = /home/long/Workspaces/MyEclipse_Professional_2014/xml01/bin/xml/user.xml
[org.dom4j.tree.DefaultElement@1a8cacd [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@9a7754 [Attribute: name id value "1"]]/>], org.dom4j.tree.DefaultElement@1105002 [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@1f4d7c0 [Attribute: name id value "2"]]/>], org.dom4j.tree.DefaultElement@180bfe1 [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@1b55efc [Attribute: name id value "3"]]/>]]
包含节点个数:3 : [org.dom4j.tree.DefaultElement@1a8cacd [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@9a7754 [Attribute: name id value "1"]]/>], org.dom4j.tree.DefaultElement@1105002 [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@1f4d7c0 [Attribute: name id value "2"]]/>], org.dom4j.tree.DefaultElement@180bfe1 [Element: <user attributes: [org.dom4j.tree.DefaultAttribute@1b55efc [Attribute: name id value "3"]]/>]]
----------------------------------
性别为男:张三
性别为男:王五
----------------------------------
id<=2 :张三
id<=2 :李四
----------------------------------
名称中包含有'张'的age节点:20
----------------------------------
age<=20并且sex='女'的name :李四


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值