android 自定义xml存储方式以及存储位置
2016-05-27 10:21
603 查看
讲一下android 自定义xml存储方式以及存储位置。首先要说明一下,要区分android sharedpreferences存储。因为一般情况sharedpreferences存储也是成为xml存储,因为存储方式是以xml形式存在的。那么先看看我说的这种存储形式。
本文代码:点击
1、存储形式
先看一张图片。这个就是存储的形式。
![](http://img.blog.csdn.net/20160527101139804?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看出开头还是很标准的。然后是custom这个标签是我自定义的。紧跟着是name也是我自定义标签,存的内容是cyuvvuh,就是值啦。
2、看看代码的实现
3、怎么使用这个工具类
其实用这种方式存储,要区别于sharedpreferences存储,以及一般的txt存储。
sharedpreferences:会更加方便,都已经封装好了。灵活使用。
txt存储:不便于管理,都是一堆或者一行行存储的文本。
自定义xml存储:可以自定义存储结构以及存储位置都方便。
最后提醒大家:记得加上权限
本文代码:点击
1、存储形式
先看一张图片。这个就是存储的形式。
可以看出开头还是很标准的。然后是custom这个标签是我自定义的。紧跟着是name也是我自定义标签,存的内容是cyuvvuh,就是值啦。
2、看看代码的实现
package com.example.xmlsavedemo; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; /* * 自定义xml存储 */ public class XmlSaveUtil { private static XmlSaveUtil mXmlSaveUtil = null; private String mstrConfigPath; public static XmlSaveUtil GetInstance() { if (mXmlSaveUtil == null) { mXmlSaveUtil = new XmlSaveUtil(); } return mXmlSaveUtil; } //设置保存位置 public void setConfigPath(String strPath) { mstrConfigPath = strPath; } //写如xml public boolean writeXML(String strContent ,String strFileName) { File pathFile = new File(mstrConfigPath); if (mstrConfigPath.length() <= 0 || !pathFile.exists()) { return false; } DocumentBuilderFactory dbfFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dbBuilder = null; try { dbBuilder = dbfFactory.newDocumentBuilder(); } catch (Exception e) { return false; } Document doc = dbBuilder.newDocument(); //创建根元素“Custom” org.w3c.dom.Element root = doc.createElement("Custom"); doc.appendChild(root); // 名称信息 org.w3c.dom.Element configNode = doc.createElement("Name"); root.appendChild(configNode); Text configValue = doc.createTextNode(String.format("%s", strContent)); configNode.appendChild(configValue); //将xml写成文件 Transformer trans; try { trans = TransformerFactory.newInstance().newTransformer(); trans.setOutputProperty("indent", "yes"); trans.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(mstrConfigPath + "/" + strFileName))); return true; } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } return false; } //读取xml public String readXML(String strFileName) { File pathFile = new File(mstrConfigPath); if (!pathFile.exists()) { return ""; } String strName = ""; DocumentBuilderFactory dbfFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dbBuilder = null; try { dbBuilder = dbfFactory.newDocumentBuilder(); } catch (Exception e) { return ""; } File inFile = new File(mstrConfigPath, strFileName); Document doc = null; try { inFile.createNewFile(); doc = dbBuilder.parse(inFile); } catch (SAXException e) { e.printStackTrace(); return ""; } catch (IOException e) { e.printStackTrace(); return ""; } org.w3c.dom.Element root = doc.getDocumentElement(); //获取内容 NodeList configNodes = root.getElementsByTagName("Name"); Text configValue = null; if (configNodes.getLength() == 1) { configValue = (Text) configNodes.item(0).getFirstChild(); strName = configValue.getNodeValue(); } return strName; } }
3、怎么使用这个工具类
package com.example.xmlsavedemo; import java.io.File; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取数据存储路径 String strSDpath = Environment.getExternalStorageDirectory().getPath(); //存放目录 File subFile = new File(strSDpath, "xml"); if (!subFile.exists()) { subFile.mkdir(); } //设置存储路径 XmlSaveUtil.GetInstance().setConfigPath(subFile.toString()); initView(); } private void initView() { findViewById(R.id.button1).setOnClickListener(this); findViewById(R.id.button2).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: EditText eText = (EditText)findViewById(R.id.editText1); String strContent = eText.getText().toString().trim(); XmlSaveUtil.GetInstance().writeXML(strContent, "data.xml"); break; case R.id.button2: TextView tView = (TextView)findViewById(R.id.textView2); String string = XmlSaveUtil.GetInstance().readXML("data.xml"); tView.setText(string); break; default: break; } } }
其实用这种方式存储,要区别于sharedpreferences存储,以及一般的txt存储。
sharedpreferences:会更加方便,都已经封装好了。灵活使用。
txt存储:不便于管理,都是一堆或者一行行存储的文本。
自定义xml存储:可以自定义存储结构以及存储位置都方便。
最后提醒大家:记得加上权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
相关文章推荐
- Android 相对布局属性总结
- Android如何调用第三方SO库
- Android Spinner 获取条目个数
- android下导入类似百度语音等sdk的环境配置
- Android SDK目录结构和工具介绍
- 关于Android导入开源项目:Error:Unable to load class 'org.gradle.api.publication.maven.internal.DefaultMavenFa
- Android Dialog对话框
- Android自定义View实现广告信息上下滚动效果
- android的四种设计模式
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- Android类参考---Fragment(四)onHiddenChanged
- 15 个 Android 通用流行框架大全
- 你需要知道的Android拍照适配方案
- 15 个 Android 通用流行框架大全
- 初识安卓基本控件_EditText
- android系统剪裁照片
- Android 最火的快速开发框架XUtils
- android 图片压缩方法
- 详解Android 6.0运行时权限
- 自定义actionBar/ Styling the Action Bar