- 一、首先是写一个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;
}
}
*四、欢迎各位朋友批评指正并提出宝贵建议 - -!