转载请注明本文出自CYM的博客(http://blog.csdn.net/cym492224103),谢谢支持!
前言
在开发中很多信息,我们都会存储在手机内部,比如一个设置,等等。此章节就是讲解如何将信息存储到文件,还会给大家带来实战工具类之一 PreferencesUtils。
文件的操作(SD卡)
写一个文件在SD卡
1> 配置权限
<!-- 老版本,考虑兼容性 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- SD卡写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2> 得到外存储器(SD卡)的路径
File dir = Environment.getExternalStorageDirectory(); File file = new File(dir , name);
3> 创建一个输出流
FileOutputStream fos = new FileOutputStream(file);
4> 写入流
fos.write(content.getBytes());
5> 关闭流
fos.closed();
XmlPullParser解析
拉解析XML
1> 得到XmlPullParserFactory 解析器工厂
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
2>新的一个解析器XmlPullParser
XmlPullParser parser = parserFactory.newXmlPullParser();
3> 得到要解析的XML 文件流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(“XX.xml”);
注意:
this.getClass().getClassLoader().getResourceAsStream(“XX.xml”);获得src根目录下的文件 this.getClass().getResourceAsStream(“XX.xml”);获得当前操作对象的所在包下
4> 给解析器设置文件流和编码格式
parser.setInput(inputStream,”utf-8”);
5> 得到解析事件类型
INT EVENTTYPE = parser.getEventType();
6> 开始判断读取文件
>> 判断是否解析到结束标签
While(eventType != parser.END_DOCUMENT){ Swich(eventType){
>> 开始标签
Case:parser.STAR_TAG
>> 读取标签里面的内容
If(“persons”.equals(parser.getName)){ persons = new ArrayList<Person>(); }else if("person".equals(parser.getName())){ person = new Person(); int id = Integer.parseInt(parser.getAttributeValue(0)); person.id = id; }else if("age".equals(parser.getName())){ int age = Integer.parseInt(parser.nextText()); person.age = age; } Berak;
>> 结束标签
Case:parser.END_TAG If(“person”.equals(parser.getName)){ List.add(person); Person=null; } Break; Default: Break; } //执行下一个标签 eventType.next(); } inputStream.close();
生成一个XML文件
1> 得到拉解析工厂
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
2> 得到序列化器
XmlSerializer serializer = parserFactory.newSerializer();
3> 创建一个XML,并设置它的模式
FileOutputStream os = new FileOutput(“XX.xml”,Context.MODE_PRIVATE);
4> 给序列化器指定文件输入流和编码
serializer.setInput(os,”utf-8”);
5> 生成文档头指定编码格式和是否是一个独立的文件
serializer.starDocument(“utf-8”,ture);
6> 生成(根)根节点
serializer.starTag(null,tagName);
7> 迭代集合
for(Lisr<XX> li : list){ serializer.starTag(null,tagName); Serializer.attribute(null,tagName,ls.value); serializer.endTag(null,tagName); }
8> 结束(根)根标签
Serializer.endTag(null,tagName);
9> 生成文档结尾
serializer.endDocument();
10> 关闭流
os.close();
SharedPreferences(共享首选项)
SharedPreferences 可以方便的存储参数,首选项就是用户设置的操作信息,以xml的形式保存
比如,游戏中的设置,每次设置完后,就回对你的设置进行
保存选项信息
1> 得到首选项
SharedPreference sp= getSharePreference(fileName,mode);
2> 得到编辑器
Editor editor = sp.edit();
3> 通过编辑器修改值
editor.setString(nameTag,value);
4> 提交提交信息
editor.commit();
读取信息
1> 得到首选项
SharedPreference sp = getSharedPreference(fileName,mode)
2> 根据首选项,得到数据
String name = sp.getString(nameTag,””);
3> 绑定值
可存储数据类型:长 ,布尔,整型,浮点,字符串
在实战项目中会把SharedPreference写成一个公共类,方便多人共同使用,因为很实用:
package com.chronocloud.lib.util; import android.content.Context; import android.content.SharedPreferences; /** * PreferencesUtils, easy to get or put data * <ul> * <strong>Preference Name</strong> * <li>you can change preference name by {@link #PREFERENCE_NAME}</li> * </ul> * <ul> * <strong>Put Value</strong> * <li>put string {@link #putString(Context, String, String)}</li> * <li>put int {@link #putInt(Context, String, int)}</li> * <li>put long {@link #putLong(Context, String, long)}</li> * <li>put float {@link #putFloat(Context, String, float)}</li> * <li>put boolean {@link #putBoolean(Context, String, boolean)}</li> * </ul> * <ul> * <strong>Get Value</strong> * <li>get string {@link #getString(Context, String)}, {@link #getString(Context, String, String)}</li> * <li>get int {@link #getInt(Context, String)}, {@link #getInt(Context, String, int)}</li> * <li>get long {@link #getLong(Context, String)}, {@link #getLong(Context, String, long)}</li> * <li>get float {@link #getFloat(Context, String)}, {@link #getFloat(Context, String, float)}</li> * <li>get boolean {@link #getBoolean(Context, String)}, {@link #getBoolean(Context, String, boolean)}</li> * </ul> * * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-3-6 */ public class PreferencesUtils { public static String PREFERENCE_NAME = "ChadAndroidCommon"; /** * put string preferences * * @param context * @param key The name of the preference to modify * @param value The new value for the preference * @return True if the new values were successfully written to persistent storage. */ public static boolean putString(Context context, String key, String value) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString(key, value); return editor.commit(); } /** * get string preferences * * @param context * @param key The name of the preference to retrieve * @return The preference value if it exists, or null. Throws ClassCastException if there is a preference with this * name that is not a string * @see #getString(Context, String, String) */ public static String getString(Context context, String key) { return getString(context, key, null); } /** * get string preferences * * @param context * @param key The name of the preference to retrieve * @param defaultValue Value to return if this preference does not exist * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with * this name that is not a string */ public static String getString(Context context, String key, String defaultValue) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getString(key, defaultValue); } /** * put int preferences * * @param context * @param key The name of the preference to modify * @param value The new value for the preference * @return True if the new values were successfully written to persistent storage. */ public static boolean putInt(Context context, String key, int value) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt(key, value); return editor.commit(); } /** * get int preferences * * @param context * @param key The name of the preference to retrieve * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this * name that is not a int * @see #getInt(Context, String, int) */ public static int getInt(Context context, String key) { return getInt(context, key, -1); } /** * get int preferences * * @param context * @param key The name of the preference to retrieve * @param defaultValue Value to return if this preference does not exist * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with * this name that is not a int */ public static int getInt(Context context, String key, int defaultValue) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getInt(key, defaultValue); } /** * put long preferences * * @param context * @param key The name of the preference to modify * @param value The new value for the preference * @return True if the new values were successfully written to persistent storage. */ public static boolean putLong(Context context, String key, long value) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putLong(key, value); return editor.commit(); } /** * get long preferences * * @param context * @param key The name of the preference to retrieve * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this * name that is not a long * @see #getLong(Context, String, long) */ public static long getLong(Context context, String key) { return getLong(context, key, -1); } /** * get long preferences * * @param context * @param key The name of the preference to retrieve * @param defaultValue Value to return if this preference does not exist * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with * this name that is not a long */ public static long getLong(Context context, String key, long defaultValue) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getLong(key, defaultValue); } /** * put float preferences * * @param context * @param key The name of the preference to modify * @param value The new value for the preference * @return True if the new values were successfully written to persistent storage. */ public static boolean putFloat(Context context, String key, float value) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putFloat(key, value); return editor.commit(); } /** * get float preferences * * @param context * @param key The name of the preference to retrieve * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this * name that is not a float * @see #getFloat(Context, String, float) */ public static float getFloat(Context context, String key) { return getFloat(context, key, -1); } /** * get float preferences * * @param context * @param key The name of the preference to retrieve * @param defaultValue Value to return if this preference does not exist * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with * this name that is not a float */ public static float getFloat(Context context, String key, float defaultValue) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getFloat(key, defaultValue); } /** * put boolean preferences * * @param context * @param key The name of the preference to modify * @param value The new value for the preference * @return True if the new values were successfully written to persistent storage. */ public static boolean putBoolean(Context context, String key, boolean value) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean(key, value); return editor.commit(); } /** * get boolean preferences, default is false * * @param context * @param key The name of the preference to retrieve * @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this * name that is not a boolean * @see #getBoolean(Context, String, boolean) */ public static boolean getBoolean(Context context, String key) { return getBoolean(context, key, false); } /** * get boolean preferences * * @param context * @param key The name of the preference to retrieve * @param defaultValue Value to return if this preference does not exist * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with * this name that is not a boolean */ public static boolean getBoolean(Context context, String key, boolean defaultValue) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getBoolean(key, defaultValue); } }