文件存储
openFileOutput()方法
两个参数:
-
文件名(不可包含路径,默认为 /data/data/包名/files/ )
-
操作模式(MODE_APPEND,MODE_PRIVATE)
MODE_PRIVATE(默认):覆盖写入
MODE_APPEND:追加
返回值:
FileOutputStream对象,使用Java流将数据写入到文件
例子:
public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWritter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOExpection e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
} catch (IOExpection e) {
e.printStackTrace();
}
}
}
}
openFileInput()方法
一个参数:
-
读取的文件名
系统到 /data/data/包名/files/ 目录下加载文件
返回值:
FileInputStream对象,使用Java流将文件数据读取出来。
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new OutputStreamReader(in));
Sring line = "";
while ((line = reader.readLine()) != null){
content.append(line);
}
} catch (IOExpection e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
} catch (IOExpection e) {
e.printStackTrace();
}
}
}
return content.toString();
}
一般使用TextUtils.isEmpty()方法来判断字符串是否为空,这个方法当传入字符串等于null或者等于空字符串的时候,都会返回true,不需要逻辑运算符连接两种情况。
SharedPreferences存储
键值对存储数据,通过键把对应值取出。
获取SharedPreferences对象有三种方法:
Context类的getSharedPreferences()方法
两个参数:
- 文件名(存放于/data/datga/包名/shared_prefs/)
- 操作模式(只有MODE_PRIVATE可选)
Activity类的getPreferences()方法
默认将当前活动类名作为SharedPreferences的文件名
一个参数:
- 操作模式
PreferenceManager类的getDefaultSharedPreferences()方法
静态方法,只接收Context参数,以当前应用程序包名作为前缀来命名SharedPreferences文件。
存储数据步骤:
-
调用SharedPreferences对象的edit()方法获取SharedPreferences.Editor对象
-
向SharedPreferences.Editor对象添加数据
添加布尔型:putBoolean(x)
添加字符串:putStirng(x)
-
调用apply()提交数据,完成数据存储操作
例子:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
Button saveData = (Button) findViewById(R.id.save_data);
save_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.apply();
}
})
}
}
从SharedPreferences中读取数据
SharedPreferences对象中提供了一系列的get方法,每种get方法对应了一种put方法。
getString(键, 默认的值)、getBoolean(键,默认的值)
SQLite 数据库
Android系统内置的数据库,运算速度快,占用资源少。
不仅支持SQL语法、还遵循ACID事务。
SharedPreferences存储只适合保存一些简单的数据和键值对。
SQLiteOpenHelper帮助抽象类
自己创建帮助类去实现onCreate()和onUpgrade()接口去对创建、升级数据库的逻辑
两个重要实例方法:
getReadableDatabase(); 只读方式打开数据库
getWritableDatabase(); 可读可写的方式打开数据库
如果数据库不存在则创建、存在则打开
两个重要的构造函数可重写,一般使用参数少的构造函数
四个参数:Context、数据库名、查询数据返回的Cursor、数据库版本
数据库文件存放在 /data/data/包名/database/
实例化一个SQLiteOpenHelper对象之后调用他的getReadableDatabase()方法创建数据库,此时重写的onCreate方法会执行。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement"
+ "author text"
+ "price real"
+ "pages integer"
+ "name text)";
private Context mContext;
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.exeSQL(CREATE_BOOK);
Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}