今天在使用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 :李四