一个很简单的复制文件的操作:
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是边加载边解析