Java基础---(io和xml)

来源:互联网 发布:金蝶软件标准版下载 编辑:程序博客网 时间:2024/05/16 10:13

一个很简单的复制文件的操作:

 

 

package test.io;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * FileName    : ClassicCopyingFiles.java
 * Description : 复制文件类
 * @author     : 黄建华
 * @version    : 1.0
 * Create Date : 2009-9-10 上午09:26:26
 **/
public class ClassicCopyingFiles {

 /**
  * @Title: main
  * @Description: TODO

  * @param args    设定文件
  * @return void    返回类型
  * @throws FileNotFoundException
  * @throws IOException
  */

 public static void main(String[] args) throws FileNotFoundException, IOException {
  String fromfilePath = "src//test//tianqi.xml";
  String tofilePath = "src//test//tianqia.xml";
  String charset = "utf-8";
  String line;
  InputStream in = new FileInputStream(fromfilePath);
  OutputStream out = new FileOutputStream(tofilePath);
  InputStreamReader rin = new InputStreamReader(in,charset);
  OutputStreamWriter wout = new OutputStreamWriter(out,charset);
  BufferedReader read = new BufferedReader(rin);
  PrintWriter pw = new PrintWriter(wout);
  line = read.readLine();
  while(line != null){
   pw.println(line);//这个是一行一行的写,写完一行就换行
   //pw.write(line);//这个也是一行一行的写,但不会换行
   line = read.readLine();
  }
  pw.flush();
  in.close();
  out.close();
  System.out.println("DONE");
 }

}

 

 

后来学习了下java操作xml----------sax和dom

 

 

xml文件为:

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

<item  id="a" name="全市">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">quanshi</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">58</api>
 <status id="5" name="status">良</status>
</item>

<item  id="b" name="福田">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">futian</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">54</api>
 <status id="5" name="status">良</status>
</item>

<item  id="c" name="罗湖">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">luohu</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">54</api>
 <status id="5" name="status">良</status>
</item>

<item  id="d" name="南山">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">nanshan</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">60</api>
 <status id="5" name="status">良</status>
</item>

<item  id="e" name="盐田">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">yantian</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">55</api>
 <status id="5" name="status">良</status>
</item>

<item  id="f" name="宝安">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">baoan</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">63</api>
 <status id="5" name="status">良</status>
</item>

<item  id="g" name="龙岗">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">longgang</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">68</api>
 <status id="5" name="status">良</status>
</item>

<item  id="h" name="光明">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">guangming</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">63</api>
 <status id="5" name="status">良</status>
</item>
<item  id="i" name="坪山">
 <cnt id="1" name="colour">0xD0FED0</cnt> 
 <address id="2" name="address">pingshan</address>
 <level id="3" name="level">II</level>
 <api id="4" name="api">68</api>
 <status id="5" name="status">良</status>
</item>
<item id="j" name="时间">
<date id="1" name="date">2009年9月10日</date>
</item>
</root>

 

dom解析xml

package test;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 * FileName : DOMParseTianqiXml.java
 * Description : dom解析xml
 * @Copyright : PowerData Software Co.,Ltd.Rights Reserved
 * @author : 黄建华
 * @version : 1.0 Create Date : 2009-9-11 上午03:45:06
 */
public class DOMParseTianqiXml {

 /**
  * @Title: main
  * @Description:(这里用一句话描述这个方法的作用)
  * @param args
  * @return void 返回类型
  * @throws
  */

 public static void main(String[] args) {
  File file = new File("src//test//tianqi.xml");
  try {
   // 1,创建解析工厂类
   DocumentBuilderFactory dbfactory = DocumentBuilderFactory
     .newInstance();
   // 2,获取,指定DocumentBuilder
   DocumentBuilder builder = dbfactory.newDocumentBuilder();
   // 3,从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
   // 如果要指定解析时的编码格式,可以用
   //Document doc = builder.parse(new InputSource(new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"))));
   Document doc = builder.parse(file);
   //获取根节点
   Element root = doc.getDocumentElement();
   //获得所有item父节点
   NodeList nodelist = root.getElementsByTagName("item");
   Element ee = (Element)nodelist.item(nodelist.getLength()-1);
   String dateid = ee.getAttribute("id");
   String datename = ee.getAttribute("name");
   NodeList childnodelist = ee.getElementsByTagName("date");
   String date = childnodelist.item(0).getFirstChild().getNodeValue();
   System.out.println("日期为:"+date+" id:"+dateid+" name:"+datename);
   System.out.println();
   //遍历item父节点
   for(int i=0;i<nodelist.getLength()-1;i++){
    //得到一个item父节点
    Element e = (Element)nodelist.item(i);
    //获取一个item父节点属性值
    String id = e.getAttribute("id");
    String name = e.getAttribute("name");
    System.out.println("item"+i+" id:"+id+" name:"+name);
    //获得所有cnt子节点
    NodeList childnodelist1 = e.getElementsByTagName("cnt");
    //获得一个cnt子节点,并且得到cnt的第一个子节点的值
    String cnt = childnodelist1.item(0).getFirstChild().getNodeValue();
    //获取一个cnt子节点属性值
    String cntid = childnodelist1.item(0).getAttributes().getNamedItem("id").getNodeValue();
    String cntname = childnodelist1.item(0).getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("item"+i+" cnt: id:"+cntid+" name:"+cntname+" value:"+cnt);
    //获得所有address子节点
    NodeList childnodelist2 = e.getElementsByTagName("address");
    //获得一个address子节点,并且得到address的第一个子节点的值
    String address = childnodelist2.item(0).getFirstChild().getNodeValue();
    //获取一个address子节点属性值
    String addressid = childnodelist2.item(0).getAttributes().getNamedItem("id").getNodeValue();
    String addressname = childnodelist2.item(0).getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("item"+i+" address: id:"+addressid+" name:"+addressname+" value:"+address);
    //获得所有level子节点
    NodeList childnodelist3 = e.getElementsByTagName("level");
    //获得一个level子节点,并且得到level的第一个子节点的值
    String level = childnodelist3.item(0).getFirstChild().getNodeValue();
    //获取一个level子节点属性值
    String levelid = childnodelist3.item(0).getAttributes().getNamedItem("id").getNodeValue();
    String levelname = childnodelist3.item(0).getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("item"+i+" level: id:"+levelid+" name:"+levelname+" value:"+level);
    //获得所有api子节点
    NodeList childnodelist4 = e.getElementsByTagName("api");
    //获得一个api子节点,并且得到api的第一个子节点的值
    String api = childnodelist4.item(0).getFirstChild().getNodeValue();
    //获取一个level子节点属性值
    String apiid = childnodelist4.item(0).getAttributes().getNamedItem("id").getNodeValue();
    String apiname = childnodelist4.item(0).getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("item"+i+" api: id:"+apiid+" name:"+apiname+" api:"+api);
    //获得所有status子节点
    NodeList childnodelist5 = e.getElementsByTagName("status");
    //获得一个status子节点,并且得到status的第一个子节点的值
    String status = childnodelist5.item(0).getFirstChild().getNodeValue();
    String statusid = childnodelist5.item(0).getAttributes().getNamedItem("id").getNodeValue();
    String statusname = childnodelist5.item(0).getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("item"+i+" status: id:"+statusid+" name:"+statusname+" value:"+status);
    System.out.println();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
//output

日期为:2009年9月10日 id:j name:时间

item0 id:a name:全市
item0 cnt: id:1 name:colour value:0xD0FED0
item0 address: id:2 name:address value:quanshi
item0 level: id:3 name:level value:II
item0 api: id:4 name:api api:58
item0 status: id:5 name:status value:良

item1 id:b name:福田
item1 cnt: id:1 name:colour value:0xD0FED0
item1 address: id:2 name:address value:futian
item1 level: id:3 name:level value:II
item1 api: id:4 name:api api:54
item1 status: id:5 name:status value:良

item2 id:c name:罗湖
item2 cnt: id:1 name:colour value:0xD0FED0
item2 address: id:2 name:address value:luohu
item2 level: id:3 name:level value:II
item2 api: id:4 name:api api:54
item2 status: id:5 name:status value:良

item3 id:d name:南山
item3 cnt: id:1 name:colour value:0xD0FED0
item3 address: id:2 name:address value:nanshan
item3 level: id:3 name:level value:II
item3 api: id:4 name:api api:60
item3 status: id:5 name:status value:良

item4 id:e name:盐田
item4 cnt: id:1 name:colour value:0xD0FED0
item4 address: id:2 name:address value:yantian
item4 level: id:3 name:level value:II
item4 api: id:4 name:api api:55
item4 status: id:5 name:status value:良

item5 id:f name:宝安
item5 cnt: id:1 name:colour value:0xD0FED0
item5 address: id:2 name:address value:baoan
item5 level: id:3 name:level value:II
item5 api: id:4 name:api api:63
item5 status: id:5 name:status value:良

item6 id:g name:龙岗
item6 cnt: id:1 name:colour value:0xD0FED0
item6 address: id:2 name:address value:longgang
item6 level: id:3 name:level value:II
item6 api: id:4 name:api api:68
item6 status: id:5 name:status value:良

item7 id:h name:光明
item7 cnt: id:1 name:colour value:0xD0FED0
item7 address: id:2 name:address value:guangming
item7 level: id:3 name:level value:II
item7 api: id:4 name:api api:63
item7 status: id:5 name:status value:良

item8 id:i name:坪山
item8 cnt: id:1 name:colour value:0xD0FED0
item8 address: id:2 name:address value:pingshan
item8 level: id:3 name:level value:II
item8 api: id:4 name:api api:68
item8 status: id:5 name:status value:良

 

sax解析xml:

 

package test;

import java.io.File;
import java.util.List;

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

/**
 * FileName    : SAXParseTianqiXml.java
 * Description : sax解析xml
 * @author     : 黄建华
 * @version    : 1.0
 * Create Date : 2009-9-11 上午08:04:07
 **/
public class SAXParseTianqiXml {

 /**
  * @Title: main
  * @Description: TODO(这里用一句话描述这个方法的作用)
  * @param  args    设定文件
  * @return void    返回类型
  * @throws
  */

 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  File file = new File("src//test//tianqi.xml");
  // 1,创建一个解析类
  SAXReader reader = new SAXReader();
  Document doc ;
  //reader.read(reader)
  try {
   // 2,从文件得到一个Document,因为XML文件中已经指定了编码,所以这里不必了
   // 如果要指定解析时的编码格式,可以用
   //doc = reader.read(new InputSource(new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"))));
   doc = reader.read(file);
   //获取根节点
   Element root = doc.getRootElement();
   //获取根节点下的所有父节点,得到一个list
   List<Element> e = root.elements("item");
   //获得的list是否为空。
   if(!e.isEmpty()){
    //遍历item父节点
    for(int i=0;i<e.size()-1;i++){
     Element ee = e.get(i);
     //获取item父节点的属性值
     String id = ee.attributeValue("id");//.attribute("id").getValue();
     String name = ee.attributeValue("name");//.attribute("name").getValue();
     System.out.print("item"+i+": attribute id:"+id+" name:"+name);
     //获取cnt子节点
     Element cnte = ee.element("cnt");
     //获取cnt子节点的值
     String cnt = cnte.getText();//or ee.elementText("cnt");
     //获取cnt子节点的属性值
     String cntid = cnte.attributeValue("id");
     String cntname = cnte.attributeValue("name");
     System.out.print("/ncnt: attribute id:"+cntid+" name:"+cntname+"; value:"+cnt);
     
     //获取address子节点
     Element addresse = ee.element("address");
     //获取address子节点的值
     String address = addresse.getText();//or ee.elementText("address");
     //获取address子节点的属性值
     String addressid = addresse.attributeValue("id");
     String addressname = addresse.attributeValue("name");
     System.out.print("/naddress: attribute id:"+addressid+" name:"+addressname+"; value:"+address);
     
     //获取level子节点
     Element levele = ee.element("level");
     //获取level子节点的值
     String level = levele.getText();//or ee.elementText("level");
     //获取level子节点的属性值
     String levelid = levele.attributeValue("id");
     String levelname = levele.attributeValue("name");
     System.out.print("/nlevel: attribute id:"+levelid+" name:"+levelname+"; value:"+level);
     
     //获取api子节点
     Element apie = ee.element("api");
     //获取api子节点的值
     String api = apie.getText();//or ee.elementText("api");
     //获取api子节点的属性值
     String apiid = apie.attributeValue("id");
     String apiname = apie.attributeValue("name");
     System.out.print("/napi: attribute id:"+apiid+" name:"+apiname+"; value:"+api);
     
     //获取status子节点
     Element statuse = ee.element("status");
     //获取status子节点的值
     String status = statuse.getText();//or ee.elementText("status");
     //获取status子节点的属性值
     String statusid = statuse.attributeValue("id");
     String statusname = statuse.attributeValue("name");
     System.out.print("/nstatus: attribute id:"+statusid+" name:"+statusname+"; value:"+status);
     System.out.println("/n");
    }
    //获取date子节点
    Element datee = e.get(e.size()-1).element("date");
    //获取date子节点的值
    String date = datee.getText();//or .elementText("date");
    //获取date子节点的属性值
    String dateid = datee.attributeValue("id");
    String datename = datee.attributeValue("name");
    System.out.println("date attribute id:"+dateid+" name:"+datename+" value:"+date);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
//output

item0: attribute id:a name:全市
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:quanshi
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:58
status: attribute id:5 name:status; value:良

item1: attribute id:b name:福田
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:futian
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:54
status: attribute id:5 name:status; value:良

item2: attribute id:c name:罗湖
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:luohu
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:54
status: attribute id:5 name:status; value:良

item3: attribute id:d name:南山
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:nanshan
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:60
status: attribute id:5 name:status; value:良

item4: attribute id:e name:盐田
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:yantian
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:55
status: attribute id:5 name:status; value:良

item5: attribute id:f name:宝安
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:baoan
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:63
status: attribute id:5 name:status; value:良

item6: attribute id:g name:龙岗
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:longgang
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:68
status: attribute id:5 name:status; value:良

item7: attribute id:h name:光明
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:guangming
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:63
status: attribute id:5 name:status; value:良

item8: attribute id:i name:坪山
cnt: attribute id:1 name:colour; value:0xD0FED0
address: attribute id:2 name:address; value:pingshan
level: attribute id:3 name:level; value:II
api: attribute id:4 name:api; value:68
status: attribute id:5 name:status; value:良

date attribute id:1 name:date value:2009年9月10日

 

dom和sax解析区别:

dom在内存中先把xml加载成一个dom树再来解析

sax是边加载边解析

 

原创粉丝点击