文件存储
经典的流操作
模式
- MODE_PRIVATE 默认,写入的内容会覆盖原文件
- MODE_APPEND 存在即追加
- MODE_WORLD_READABLE 4.2已弃用,有安全隐患
- MODE_WORLD_WRITEABLE 同上
写入
openFileOutput()
public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
自动保存到 /data/data/<项目id>/files/
写出
openFileInput()
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
SharedPreferences 存储
键值对形式存储,xml形式格式。
模式
- MODE_PRIVATE 只有当前应用程序可以操作
- MODE_MULTI_PROCESS 也是只能当前,适用于多进程
- MODE_WORLD_READABLE 4.2后弃用
- MODE_WORLD_WRITEABLE 4.2后弃用
存
getSharedPreferences(文件名,模式)
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
存地址 /data/data/<项目id>/shared_prefs /
读
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
###SQLite 数据库存储 你懂的。
public class MyDatabaseHelper extends SQLiteOpenHelper {
//接收参数:String name, 数据库名称 int version 用于更新版本
public MyDatabaseHelper(Context context, String name, CursorFactoryfactory, int version){}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql语句);
}
//只有在version 变大时才执行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
//这一步就创建数据库,和表结构了
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
// C
db.insert("Book", null, values);
// U
db.update("Book", values, "name = ?", new String[] { "Tom" });
// D
db.delete("Book", "name = ?", new String[] { "Tom" });
// R
//String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
Cursor cursor = db.query("Book", null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
}
cursor.close();
当然你也可以自己写sql
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Da Vinci Code", "Dan Brown", "454", "16.96" })
事务
db.beginTransaction(); // 开启事务
db.setTransactionSuccessful(); // 事务已经执行成功
db.endTransaction(); // 结束事务
跨程序取数据怎么办?
内容提供器( Content Provider) 下文学习