android工程根目录下文件的获取

android工程根目录下文件的获取[问题点数:60分,结帖人:csuhanyong]
http://topic.csdn.net/u/20101118/17/8a731683-0234-4cac-be75-fb13b868f59f.html

我建了个abc.xml文件放在android工程的根目录下,如果在普通Java工程的话我用 File f = new File(abc.xml)就可以得到;但是在android环境下 会自动把这个路径变为 “/abc.xml”;然后报“ 11-18 08:58:43.572: WARN/System.err(19260): java.io.FileNotFoundException: /systemapps.xml (No such file or directory)”异常,可能是编译路径与以前不一样导致。
那有什么办法可以读取这个xml文件呢?

—————

获取文件路径的方法

1.绝对路径:/data/data/packagename/files/filename;

2.context:context.getFilesDir()+”/filename”;

缓存目录:/data/data/packagename/Cache或getCacheDir();

如果文件过大就不能存放在手机的文件目录,需要存储到SDCard上。

SDCard目录:/sdcard/或Environment.getExternalStorageDirectory()

使用SDCard目录前,需要判断是否有sdcard:Environment.getExternalStorageState()。操作此目录时需要在主配置文件中注册操作权限。
http://hi.baidu.com/garylijs/blog/item/afaa0dedeef215dbb31cb1d4.html

———————-

android不支持读取与工程直接子级的文件。解决办法是:
在res文件夹下新建raw文件夹,然后将abc.xml复制到raw文件夹下。

读取代码:

Java code
InputStream input = getResources().openRawResource(R.raw.abc);
BufferedReader read = new BufferedReader(new InputStreamReader(input));
String line = “”;
while((line=read.readLine()) != null){
System.out.println(line);
}

—————–

或者
res文件夹下新建raw文件夹,然后将abc.xml复制到raw文件夹下
Java codeInputStream in = context.openFileInput(“abc.xml”);

[转]Android读写文件

本文转自:http://blog.sina.com.cn/s/blog_4d25c9870100qpax.html

 

一、       从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写)

String res = “”; 

try

InputStream in = getResources().openRawResource(R.raw.bbi); 

//在\Test\res\raw\bbi.txt,

  int length = in.available();       

  byte [] buffer = new byte[length];        

  in.read(buffer);         

  //res = EncodingUtils.getString(buffer, “UTF-8”);

  //res = EncodingUtils.getString(buffer, “UNICODE”); 

  res = EncodingUtils.getString(buffer, “BIG5”); 

  //依bbi.txt的编码类型选择合适的编码,如果不调整会乱码

  in.close();            

  }catch(Exception e){ 

     e.printStackTrace();         

  } 

myTextView.setText(res);//把得到的内容显示在TextView上

二、       从asset中获取文件并读取数据(资源文件只能读不能写)

String fileName = “yan.txt”; //文件名字

String res=””; 

try

  InputStream in = getResources().getAssets().open(fileName);

  // \Test\assets\yan.txt这里有这样的文件存在

  int length = in.available();         

byte [] buffer = new byte[length];        

in.read(buffer);            

res = EncodingUtils.getString(buffer, “UTF-8”);     

}catch(Exception e){ 

     e.printStackTrace();         

  }

三、       从sdcard中去读文件,首先要把文件通过\android-sdk-windows\tools\adb.exe把本地计算机上的文件copy到sdcard上去,adb.exe push e:/Y.txt /sdcard/, 不可以用adb.exe push e:\Y.txt \sdcard\ 同样: 把仿真器上的文件copy到本地计算机上用: adb pull ./data/data/com.tt/files/Test.txt e:/

String fileName = “/sdcard/Y.txt”;

//也可以用String fileName = “mnt/sdcard/Y.txt”;

String res=””;     

try

FileInputStream fin = new FileInputStream(fileName);

//FileInputStream fin = openFileInput(fileName);  

//用这个就不行了,必须用FileInputStream

   int length = fin.available(); 

   byte [] buffer = new byte[length]; 

   fin.read(buffer);     

   res = EncodingUtils.getString(buffer, “UTF-8”); 

   fin.close();     

   }catch(Exception e){ 

          e.printStackTrace(); 

myTextView.setText(res);

四、       写文件, 一般写在\data\data\com.test\files\里面,打开DDMS查看file explorer是可以看到仿真器文件存放目录的结构的

  String fileName = “TEST.txt”;

  String message = “FFFFFFF11111FFFFF” ;

writeFileData(fileName, message);

 

  public voidwriteFileData(String fileName,String message){ 

      try

       FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);

       byte [] bytes = message.getBytes(); 

       fout.write(bytes); 

        fout.close(); 

       } 

      catch(Exception e){ 

       e.printStackTrace(); 

      } 

  }    

五、       写, 读data/data/目录(相当AP工作目录)上的文件,用openFileOutput

  //写文件在./data/data/com.tt/files/下面

  public voidwriteFileData(String fileName,String message){ 

      try

       FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);

       byte [] bytes = message.getBytes(); 

       fout.write(bytes); 

        fout.close(); 

       } 

      catch(Exception e){ 

       e.printStackTrace(); 

      } 

  }

//——————————————————-

//读文件在./data/data/com.tt/files/下面

  public String readFileData(String fileName){ 

       String res=””; 

       try

        FileInputStream fin = openFileInput(fileName); 

        int length = fin.available(); 

        byte [] buffer = new byte[length]; 

        fin.read(buffer);     

        res = EncodingUtils.getString(buffer, “UTF-8”); 

        fin.close();     

       } 

       catch(Exception e){ 

        e.printStackTrace(); 

       } 

       return res; 

     

六、       写, 读sdcard目录上的文件,要用FileOutputStream, 不能用openFileOutput

   //写在/mnt/sdcard/目录下面的文件

  public voidwriteFileSdcard(String fileName,String message){ 

      try

       //FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);

      FileOutputStream fout = newFileOutputStream(fileName);

       byte [] bytes = message.getBytes(); 

       fout.write(bytes); 

        fout.close(); 

       } 

      catch(Exception e){ 

       e.printStackTrace(); 

      } 

  }

 

  //读在/mnt/sdcard/目录下面的文件

  public String readFileSdcard(String fileName){

       String res=””; 

       try

        FileInputStream fin = new FileInputStream(fileName); 

        int length = fin.available(); 

        byte [] buffer = new byte[length]; 

        fin.read(buffer);     

        res = EncodingUtils.getString(buffer, “UTF-8”); 

        fin.close();     

       } 

       catch(Exception e){ 

        e.printStackTrace(); 

       } 

       return res; 

  }

注: openFileOutput是在raw里编译过的,FileOutputStream是任何文件都可以

参考:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6017.html

 

[按:] 看到这篇文章,实在觉得说的很好,很具体。果断转了

WebView显示汉字乱码

使用URLConnection获取网页内容之后,使用Log.v输出控制台,为正常信息。使用TextView显示为正常信息。使用WebView.loadData(……);函数则输出乱码。试过各种编码格式,试过把eclipse改为各种编码格式,试过URLConnection读取的inputstream设为各种编码格式,均不好使。。。。。。

后来webshow.loadDataWithBaseURL(null, r.toString(), “text/html”, “utf-8”, null);可以正常实现。

 

Android 打印信息到控制台

引入包: import android.util.Log; 打印语句: Log.v(“RSS”,”打印内容”); RSS是log标签,第二个参数为打印内容 查看方式: eclipse的window中调出logCat界面 在logCat界面中添加logFilter. 并且定义类别为info, 标签为RSS(和Log.v中的应相同),定义名字为:RSS_filter。 点击filter中的该名字。并在右边选择相同的类别信息。就可以看到输出。

图中,定义了filter的类别是verbose.

Log.v查看
Log.v查看

 

【Android开发】WebView控件的使用(加载HTML的字符串方式)

  效果就是把一段HTML的字符串,转化成能够在界面上显示的网页:

   <WebView
       android:id=”@+id/mail_open_html”
       android:layout_width=”fill_parent”
       android:layout_height=”wrap_content”
       android:layout_below=”@+id/mail_open_body”
       android:paddingRight=”5.0dip”
       android:text=”Mail HTML this is a HTML.”
        />

在程序中:

       //得到WebView组件

      WebView bodyHtml=(WebView)envelope.findViewById(R.id.mail_open_html);

       //能够的调用JavaScript代码
       bodyHtml.getSettings().setJavaScriptEnabled(true);

       //加载HTML字符串进行显示

       bodyHtml.loadData(<html>这是一段HTML的代码</html>,
    “text/html”, “utf-8”);

 

Android SAX解析XML

解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析。

DOM(文件对象模型)解析:解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以根据DOM接口来操作这个树结构了。

优点:整个文档读入内存,方便操作:支持修改、删除和重现排列等多种功能。

缺点:将整个文档读入内存中,保留了过多的不需要的节点,浪费内存和空间。

使用场合:一旦读入文档,还需要多次对文档进行操作,并且在硬件资源充足的情况下(内存,CPU)。

为了解决DOM解析存在的问题,就出现了SAX解析。其特点为:

优点:不用实现调入整个文档,占用资源少。尤其在嵌入式环境中,如android,极力推荐使用SAX解析。

缺点:不像DOM解析一样将文档长期驻留在内存中,数据不是持久的。如果事件过后没有保存数据,数据就会丢失。

使用场合:机器有性能限制。

SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。

基于事件驱动的处理模式主要是基于事件源和事件处理器(或者叫监听器)来工作的。一个可以产生事件的对象叫做事件源,而一个可以针对事件做出响应的对象就被叫做事件处理器。

在SAX接口中,事件源是org.xml.sax包中的XMLReader,他通过parse()方法开始解析XML文档,并根据文档内容产生事件。而事件处理器则是org.xml.sax包中的ContentHandler、DTDHandler、ErrorHandler,以及EntityResolver这四个接口。他们分别处理事件源在解析过程中产生不同类的事件(其中DTDHandler为解析文档DTD时所用)。详细介绍如下表:

在上述四个接口中,最重要的就是ContentHandler这个接口,下面是对这个接口方法的说明:

复制代码
//设置一个可以定位文档内容事件发生位置的定位器对象

public void setDocumentLocator(Locator locator)

//用于处理文档解析开始事件

public void startDocument()throws SAXException

//处理元素开始事件,从参数中可以获得元素所在名称空间的uri,元素名称,属性类表等信息

public void startElement(String namespacesURI , String localName , String qName , Attributes atts) throws SAXException

//处理元素结束事件,从参数中可以获得元素所在名称空间的uri,元素名称等信息

public void endElement(String namespacesURI , String localName , String qName) throws SAXException

//处理元素的字符内容,从参数中可以获得内容

public void characters(char[] ch , int start , int length)  throws SAXException
复制代码

这里再介绍下XMLReader中的方法。

//注册处理XML文档解析事件ContentHandler
public void setContentHandler(ContentHandler handler)

//开始解析一个XML文档
public void parse(InputSorce input) throws SAXException

SAX实现实体解析的步骤:

在android中使用SAX是有迹可循的,完全可以按照下面的方法就可以轻松找到xml里的tag,然后得到想要的内容。具体实现步骤如下:

(一)第一步:新建一个工厂类SAXParserFactory,代码如下:

SAXParserFactory factory = SAXParserFactory.newInstance();

(二)第二步:让工厂类产生一个SAX的解析类SAXParser,代码如下:

SAXParser parser = factory.newSAXParser();

(三)第三步:从SAXPsrser中得到一个XMLReader实例,代码如下:

XMLReader reader = parser.getXMLReader();

(四)第四步:把自己写的handler注册到XMLReader中,一般最重要的就是ContentHandler,代码如下:

RSSHandler handler = new RSSHandler();
reader.setContentHandler(handler);

(五)第五步:将一个xml文档或者资源变成一个java可以处理的InputStream流后,解析正式开始,代码如下:

parser.parse(is);

上面几个步骤中,最重要、最关键的就是第四步,handler的实现。

下面通过一个RSS解析的例子说明handler的实现:

我们先是自己见一个rss的xml文档,实现本地解析,新建的rss文档如下:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
    <channel>
        <title>RSS 解析练习</title>
        <description>hehehaha</description>
        <link>http://www.cnblogs.com/felix-hua/</link>
        <language>zh-cn</language>


        <item>
            <title><![CDATA[头条]]></title>
            <link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
            <category>0</category>
            <description>描述详细信息的</description>
            <pubDate>2012-01-09</pubDate>
        </item>
        
        <item>
            <title><![CDATA[新闻]]></title>
            <link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
            <category>0</category>
            <description>描述详细信息的</description>
            <pubDate>2012-01-09</pubDate>
        </item>
        
        <item>
            <title><![CDATA[首页]]></title>
            <link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
            <category>0</category>
            <description>描述详细信息的</description>
            <pubDate>2012-01-09</pubDate>
        </item>
        
        <item>
            <title><![CDATA[财经]]></title>
            <link>http://mc.cz001.com.cn/images/menu/23_active.png</link>
            <category>0</category>
            <description>描述详细信息的</description>
            <pubDate>2012-01-09</pubDate>
        </item>
复制代码

建好后,我们命名为rssxml.xml,然后放到项目的根目录下:

然后我们可以建立两个实体类:

1、RSSFeed,与完整的xml文档相对应;

2、RSSItem,与item标签内的信息相对应。

这样在解析xml时,我们就可以把解析出来的信息放到实体类里,然后直接操作实体类就可以了。下面给出代码:

RSSFeed.java

复制代码
package com.sax.org.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

public class RSSFeed {
    private String title;
    private int itemcount;
    private List<RSSItem> itemlist;
    
    public RSSFeed(){
        itemlist = new Vector<RSSItem>(0);
    }
    
    /**
     * 负责将一个RSSItem加入到RSSFeed类中
     * @param item
     * @return
     */
    public int addItem(RSSItem item){
        itemlist.add(item);
        itemcount++;
        return itemcount;
    }
    
    public RSSItem getItem(int location){
        return itemlist.get(location);
    }
    
    public List<RSSItem> getAllItems(){
        return itemlist;
    }
    
    /**
     * 负责从RSSFeed类中生成列表所需要的数据
     * @return
     */
    public List getAllItemForListView(){
        List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
        int size = itemlist.size();
        for(int i=0 ; i<size ; i++){
            HashMap<String , Object> item = new HashMap<String, Object>();
            item.put(RSSItem.TITLE, itemlist.get(i).getTitle());
            item.put(RSSItem.PUBDATE, itemlist.get(i).getPubdate());
            data.add(item);
        }
        return data;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getItemcount() {
        return itemcount;
    }

    public void setItemcount(int itemcount) {
        this.itemcount = itemcount;
    }

    public List<RSSItem> getItemlist() {
        return itemlist;
    }

    public void setItemlist(List<RSSItem> itemlist) {
        this.itemlist = itemlist;
    }
    
}
复制代码

RSSItem.java

复制代码
package com.sax.org.entity;

public class RSSItem {
    public static String TITLE = "title";
    public static String PUBDATE = "pubdate";
    public String title;
    public String description;
    public String link;
    public String category;
    public String pubdate;
    public RSSItem() {
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    public String getPubdate() {
        return pubdate;
    }
    public void setPubdate(String pubdate) {
        this.pubdate = pubdate;
    }
    
    
}
复制代码

下面就是最最重要的地方了,建立自己的ContentHandler.看下面的代码:

RSSHandler.java

复制代码
package com.sax.org.handler;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.sax.org.entity.RSSFeed;
import com.sax.org.entity.RSSItem;

public class RSSHandler extends DefaultHandler{
    RSSFeed RssFeed;
    RSSItem RssItem;
    final int RSS_TITLE = 1;
    final int RSS_LINK = 2;
    final int RSS_DESCRIPTION = 3;
    final int RSS_CATEGORY = 4;
    final int RSS_PUBDATE = 5;
    int currentstate = 0;
    
    public RSSHandler(){}
    
    public RSSFeed getFeed(){
        return RssFeed;
    }
    
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        RssFeed = new RSSFeed();
        RssItem = new RSSItem();
    }
    
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        if(localName.equals("channel")){
            currentstate = 0;
            return;
        }
        if(localName.equals("item")){
            RssItem = new RSSItem();
            return;
        }
        if(localName.equals("title")){
            currentstate = RSS_TITLE;
            return;
        }
        if(localName.equals("description")){
            currentstate = RSS_DESCRIPTION;
            return;
        }
        if(localName.equals("link")){
            currentstate = RSS_LINK;
            return;
        }
        if(localName.equals("category")){
            currentstate = RSS_CATEGORY;
            return;
        }
        if(localName.equals("pubDate")){
            currentstate = RSS_PUBDATE;
            return;
        }
        currentstate = 0;
    }
    
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        if(localName.equals("item")){
            RssFeed.addItem(RssItem);
            return;
        }
    }
    
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        String theString = new String(ch, start, length);
        switch(currentstate){
        case RSS_TITLE:
            RssItem.setTitle(theString);
            currentstate = 0;
            break;
        case RSS_DESCRIPTION:
            RssItem.setDescription(theString);
            currentstate = 0;
            break;
        case RSS_LINK:
            RssItem.setLink(theString);
            currentstate = 0;
            break;
        case RSS_PUBDATE:
            RssItem.setPubdate(theString);
            currentstate = 0;
            break;
        case RSS_CATEGORY:
            RssItem.setCategory(theString);
            currentstate = 0;
            break;
        default:
            return;
        }
    }
}
复制代码

就上面的代码分析,实现一个ContentHandler一般要一下几个步骤:

1、声明一个类,继承DefaultHandler。DefaultHandler是一个基类,这个类里面简单实现了一个ContentHandler。我们只需要重写里面的方法即可。

2、重写 startDocument() 和 endDocument(),一般解析将正式解析之前的一些初始化工资放到startDocument()里面,收尾的工作放到endDocument()里面。

3、重写startElement(),XML解析器遇到XML里面的tag时就会调用这个函数。经常在这个函数内是通过localName俩进行判断而操作一些数据。

4、重写characters()方法,这是一个回调方法。解析器执行完startElement()后,解析完节点的内容后就会执行这个方法,并且参数ch[]就是节点的内容。这个例子里我们根据currentstate的不同,来判断当前那个tag的内容,并放到合适的实体类中。

5、重写endElement()方法,这个方法与startElement()相对应,解析完一个tag节点后,执行这个方法。再找个例子中,如果解析一个item结束,就将RSSIiem添加到RSSFeed中。

最后我们实现一个activity来展现解析的结果:

复制代码
package com.sax.org;

import java.io.IOException;
import java.net.URL;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import com.sax.org.entity.RSSFeed;
import com.sax.org.entity.RSSItem;
import com.sax.org.handler.RSSHandler;

public class SAXReaderActivity extends Activity {
    /** Called when the activity is first created. */

    public String rssUrl = "http://mc.cz001.com.cn/a/indexconfig/index.rss";
    public RSSFeed feed;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        feed = getFeed(rssUrl);
        showList();
    }

    public RSSFeed getFeed(String rssUrl) {
        try {
// 这里我们实现了本地解析,所以注掉了这个取网络数据的。
//            URL url = new URL(rssUrl);
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            XMLReader reader = parser.getXMLReader();
            RSSHandler handler = new RSSHandler();
            reader.setContentHandler(handler);
            InputSource is = new InputSource(this.getClassLoader().getResourceAsStream("rssxml.xml"));//取得本地xml文件
            reader.parse(is);
            return handler.getFeed();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public void showList() {
        ListView rsslistview = (ListView) findViewById(R.id.rssList);
        TextView rsstitle = (TextView) findViewById(R.id.rsstitle);
        if (feed == null) {
            rsstitle.setText("访问失败...");
            return;
        }
        SimpleAdapter adapter = new SimpleAdapter(this,
                feed.getAllItemForListView(),
                android.R.layout.simple_list_item_2, new String[] {
                        RSSItem.TITLE, RSSItem.PUBDATE }, new int[] {
                        android.R.id.text1, android.R.id.text2 });
        rsslistview.setAdapter(adapter);
    }
}
复制代码

展示下运行结果:

OK。

本文参考自《Google+Android入门与实践》,谢谢。

 

android dom解析xml

DOM解析XML文件时,会将XML文件的所有内容以文档树方式存放在内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来是比较直观的,并且在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容以文档树方式存放在内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM也是可行的。
public class DOMXmlReader {
public static List<Person> XMLReader(InputStream inStream)throws Exception{
List<Person> persons=new ArrayList<Person>();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try{
DocumentBuilder builder=factory.newDocumentBuilder();
Document document= builder.parse(inStream);
Element root=document.getDocumentElement();
NodeList items=root.getElementsByTagName(“person”);//得到所有person节点
for(int i=0;i<items.getLength();i++){
Person person=new Person();
Element personNode=(Element)items.item(i);
person.setId(new Integer(personNode.getAttribute(“id”)));
//获取person节点下的所有子节点(标签之间的空白节点和name/age元素)
NodeList childsNodes = personNode.getChildNodes();
for (int j = 0; j < childsNodes.getLength(); j++) {
Node node = (Node) childsNodes.item(j);    //判断是否为元素类型
if(node.getNodeType() == Node.ELEMENT_NODE){
Element childNode = (Element) node;
//判断是否name元素
if (“name”.equals(childNode.getNodeName())) {
//获取name元素下Text节点,然后从Text节点获取数据             person.setName(childNode.getFirstChild().getNodeValue());
} else if (“age”.equals(childNode.getNodeName())) {
person.setAge(new Short(childNode.getFirstChild().getNodeValue()));
}
}
}
persons.add(person);
}
inStream.close();

}catch(Exception e){
e.printStackTrace();

}

return persons;

}

}

有了自己的博客

之前的博客:

hi.baidu.com/yuletianxia750

以后会写一个爬虫慢慢把旧博客的文章爬取到这个新博客来

嗯。以后就在这安家了。就这么说定了