用XmlSerializer写xml文件与读xml文件

本文介绍了一种在Android环境中使用Java进行XML文件读写的实现方法。包括如何通过判断文件是否存在来创建XML文件,并向其中写入数据;以及如何解析XML文件获取所需的数据。通过实例演示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写xml文件:在写文件时要判断文件是否存在不存在可以创建

xmlfile.mkdir();//创建文件夹

xmlfile.createNewFile();//创建文件

	private XmlSerializer serializer;
private void writeXML() {
		// 取到更改后的值
		List<HashMap<String, String>> relist = new ArrayList<HashMap<String, String>>();
		//在adapter中取到更改以后的值
		relist = adapter.getData();
		//测试是否能取到正确的值
		for (int i = 0; i < relist.size(); i++) {
			String reid = relist.get(i).get("id").toString();
			System.out.println("---activity reid ---"+reid);
			String revalue = relist.get(i).get("value").toString();
			System.out.println("---activity revalue ---"+revalue);
		}

		try {
			//向data/data/包名/files下的appserver.xml文件写
			//OutputStream out = this.openFileOutput("appserver.xml",
			//		Context.MODE_PRIVATE);
			//OutputStreamWriter outw = new OutputStreamWriter(out);
			String xmlPath = File.separator + "sdcard" + File.separator+"appserver.xml";
			File xmlFile = new File(xmlPath);
			FileOutputStream fileos = new FileOutputStream(xmlFile);

			serializer = Xml.newSerializer();
			//serializer.setOutput(outw);
			serializer.setOutput(fileos,"UTF-8");//设置输出的writer对象
			serializer.startDocument("UTF-8", true); //写入xml标识语句
			serializer.startTag(null, "resources");// 开始根元素标签<resources>
			for (int i = 0; i < relist.size(); i++) {
				serializer.startTag(null, "app");//写入xml开始元素标识
				serializer.attribute(null, "id", relist.get(i).get("id"));
				serializer.attribute(null, "value", relist.get(i).get("value"));//写属性
				serializer.text("aaa");//写入元素的值
				serializer.endTag(null, "app");
			}
			// 结束标签</resources>
			serializer.endTag(null, "resources");
			// 结束文档标记
			serializer.endDocument();
			// System.out.println("----save file----");
			serializer.flush(); // 将serializer中数据写入文件
			fileos.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}



读xml文件:1、读取res下的xml的文件。用XmlPullParser

XmlPullParser xrp =null;
InputStream slideInputStream = null;
AppServerVO appSerer = AppServerVO.getInstance();
String xmlPath = File.separator + "sdcard" + File.separator +"appserver.xml";
File xmlFile = new File(xmlPath);
if(xmlFile.exists()){
	System.out.println("--文件存在---");
		 try {
				slideInputStream = new FileInputStream(xmlPath);
				XmlPullParserFactory factory = XmlPullParserFactory.newInstance();   
				factory.setNamespaceAware(true);   
				xrp = factory.newPullParser(); 
				xrp.setInput(slideInputStream, "UTF-8");
			while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
				if (xrp.getEventType() == XmlResourceParser.START_TAG) {
					String s = xrp.getName();
					if (s.equals("app")) {
						String id = xrp.getAttributeValue(null, "id");
						String value = xrp.getAttributeValue(null, "value");
						if ("name".equals(id)) {
							appSerer.setName(value);
						} else if ("sdkType".equals(id)) {
							appSerer.setSdkType(value);
						} 
					}
				}
				xrp.next();
			}
			return appSerer;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//关闭输入流  
            if (slideInputStream != null) {  
                try {
					slideInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}  
                slideInputStream = null;  
            } 
		}
	}else{
		System.out.println("--文件不存在---");
	}
		return null;
2、读取指定目录下的xml文件用XMLResourceParser

Resources res = getResources();
XmlResourceParser xrp = res.getXml(R.xml.appserver);

while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
			if (xrp.getEventType() == XmlResourceParser.START_TAG) {
			String s = xrp.getName();
			if (s.equals("app")) {
				String id = xrp.getAttributeValue(null, "id");
				String value = xrp.getAttributeValue(null, "value");
				if ("name".equals(id)) {
					appSerer.setName(value);
				} else if ("sdkType".equals(id)) {
					appSerer.setSdkType(value);
				}
				}
			}
			xrp.next();
			}
		return appSerer;
	} catch (Exception e) {
		
	} finally {
		xrp.close();
	}
	return null;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值