在离线状态下保存数据可能会用到的XML文件读写

来源:互联网 发布:淘宝店主照片认证 编辑:程序博客网 时间:2024/05/21 08:56
  • 一、首先是写一个xml文件
//自定义一个文件保存路径String path_stack_name="/mnt/sdcard"+"/config"+"/stack_names.xml";//写文件int writeFile(){try {  //首先将你需要的数据序列化为可读的xml字符串  String xml = getTabItemsString(); //用文件输出流将得到的xml字符串写到指定文件保存路径去FileOutputStream fos =  new FileOutputStream(path_stack_name,false);                   fos.write(xml.getBytes("UTF-8"));                 fos.close();             } catch (Exception e) {                 e.printStackTrace();                 return -1;             }             return 0;        }
 // 上文getTabItemsString方法,序列化xml文件      public String getTabItemsString(){             try {                    //由android.util.Xml创建一个XmlSerializer实例                      XmlSerializer serializer = Xml.newSerializer();                           StringWriter writer = new StringWriter();                      serializer.setOutput(writer);                       serializer.startDocument("UTF-8", true);                     changeLine(serializer,enter);                    serializer.startTag("", "config");                    changeLine(serializer,enter);                    serializer.startTag("", "stackNameGroup");                    serializer.attribute("", "name", HSResourceUtil.getString(R.string.stack_name));                    //tabItems即为我需要的数据                    if (tabItems !=null && tabItems.size() != 0) {                    for(int i=0;i<tabItems.size();i++)                    {                        changeLine(serializer,enter);                        serializer.startTag("", "itemName");                        serializer.attribute("", "number",""+tabItems.get(i).getNumber());                        serializer.attribute("", "value", tabItems.get(i).getStackName());                        serializer.endTag("", "itemName");                    }                    }else{                        changeLine(serializer,enter);                        serializer.startTag("", "itemName");                        serializer.attribute("", "number", "");                        serializer.attribute("", "value", "");                        serializer.endTag("", "itemName");                    }                     changeLine(serializer,enter);                     serializer.endTag("", "stackNameGroup");                    changeLineEnd(serializer,enter);                    serializer.endTag("", "config");                      serializer.endDocument();                    serializer.flush();                    return writer.toString();             } catch (Exception e) {                    Log.i("wsh", "e---"+e.toString());                }            return "";         }
//用到的工具类     String enter = System.getProperty("line.separator");//换行             public void changeLine(XmlSerializer serializer, String enter) throws Exception {                  String text="\n";                for(int i=0;i<serializer.getDepth();i++)                {                    text+="  ";                }                serializer.text(text);             }             public void changeLineEnd(XmlSerializer serializer, String enter) throws Exception {                  String text="\n";                for(int i=0;i<serializer.getDepth()-1;i++)                {                    text+="  ";                }                serializer.text(text);             }

*二、其次是读一个XML文件

//path和写的路径一致            private void parserFile(String path)        {            try {                FileInputStream fis = new FileInputStream(path);                //这里使用缓冲流,优势是可以一次读入多个字节,咱不向磁盘写入,先放在内存中,待达到缓冲区大小后在写入磁盘,这样可以减少磁盘IO操作,提高效率,默认缓冲区为8M                BufferedInputStream is = new BufferedInputStream(fis);                parse(is);                fis.close();                is.close();            } catch (Exception e) {                e.printStackTrace();            }  //解析输入流        }            //具体XML解析方法            public void parse(BufferedInputStream is) throws Exception            {                //由android.util.Xml创建一个XmlPullParser实例                  XmlPullParser parser = Xml.newPullParser();                  //设置输入流 并指明编码方式                  parser.setInput(is, "UTF-8");                              int eventType = parser.getEventType();                String value="";                int itemNumber;                while (eventType != XmlPullParser.END_DOCUMENT) {                    switch (eventType) {                    case XmlPullParser.START_DOCUMENT:                        break;                      case XmlPullParser.START_TAG:                        String parserTagName=parser.getName();                        if (parser.getName().equals("stackNameGroup")) {                            break;                        }                        if (parser.getName().equals("config")) {                            break;                        }                        if (parser.getName().equals("itemName")) {                            itemNumber = Integer.valueOf(parser.getAttributeValue(null,"number"));                            value=parser.getAttributeValue(null, "value");                            if (tabItems==null) {                                tabItems = new ArrayList<TabItem>();                            }                            if (tabItems!=null) {                                tabItems.add(new TabItem(itemNumber, value));                            }                        }                    case XmlPullParser.END_TAG:                         break;                    }                    eventType = parser.next();                 }        }

*三、就差一个tabItems的Bean就好了

public class TabItem {    int number;    String stackName;    public int getNumber() {        return number;    }    public void setNumber(int number) {        this.number = number;    }    public String getStackName() {        return stackName;    }    public void setStackName(String stackName) {        this.stackName = stackName;    }    public TabItem(int number, String stackName) {        super();        this.number = number;        this.stackName = stackName;    }}

*四、欢迎各位朋友批评指正并提出宝贵建议 - -!

原创粉丝点击