一、内部存储
Android应用的内部存储是应用私有的文件存储空间,在设备上具有高度的安全性。只有当前应用才能访问这些文件,其他应用或用户无法访问。应用通过Context.getFilesDir()方法获得这个目录。以下是内部存储的一些特点:
1.文件存储在设备上的私有空间下,只有当前应用才能访问
2.存储数据的大小受到设备可用存储空间的限制,因此适用于少量数据存储
3.当用户卸载应用时,应用私有的内部存储空间也会被删除
二、外部存储
Android应用的外部存储是设备上所有应用共有的文件存储空间。它适用于存储大量数据并且这些数据需要在不同应用间共享的场景。此外,外部存储对于一些需要长时间保存的文件(例如用户录制的视频)也非常适合。以下是外部存储的一些特点:
1.应用可以通过Context.getExternalFilesDir()方法获得外部存储目录下的一个私有目录,在该目录下存储的数据只能由该应用访问
2.外部存储还包括公有目录,其中包括Download、Pictures、Music、Movies、DCIM、Documents等目录,存储在公有目录下的数据可被所有应用访问
3.存储在外部存储中的数据可能会被用户删除或设备清理,因此开发人员需要注意备份和数据恢复等问题
// 内部存储
String fileName = "internal.txt";
String content = "hello world!";
FileOutputStream fos = null;
try {
fos = openFileOutput(fileName, MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 外部存储
String fileName = "external.txt";
String content = "hello world!";
File file = new File(getExternalFilesDir(null), fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
三、SharedPreferences
SharedPreferences可用于存储轻量级的简单数据,例如应用设置、用户偏好等。它通过键值对的形式存储数据,并且存储在设备上的xml文件中。以下是SharedPreferences的一些特点:
1.应用可以通过Context.getSharedPreferences()方法获得一个SharedPreferences对象,对象可被多个组件共享
2.存储的数据不适合大量或敏感数据
3.当用户卸载应用时,SharedPreferences中的数据也会被删除
SharedPreferences sp = getSharedPreferences("my_sp", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("username", "john");
editor.apply();
String username = sp.getString("username", "");
四、数据库存储
SQLite是Android系统默认的关系型数据库,可用于存储大量复杂的结构化数据。它提供了标准的SQL语句操作,结合ContentProvider可方便地对外提供数据。以下是SQLite的一些特点:
1. SQLite的数据库文件存储在设备上的内部或外部存储,但它可以通过ContentProvider和ContentResolver对外提供数据接口,数据可以被其他应用访问
2. SQLite具有ACID事务,可确保数据的完整性和一致性
3. 当用户卸载应用时,数据库中的数据也会被删除
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "my_db";
private static final int DB_VERSION = 1;
public static final String TABLE_NAME = "student";
public static final String COL_ID = "_id";
public static final String COL_NAME = "name";
public static final String COL_AGE = "age";
public MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "CREATE TABLE " + TABLE_NAME + "(" +
COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COL_NAME + " TEXT NOT NULL," +
COL_AGE + " INTEGER);";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
sqLiteDatabase.execSQL(sql);
onCreate(sqLiteDatabase);
}
}
MyDatabaseHelper helper = new MyDatabaseHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COL_NAME, "Tom");
values.put(MyDatabaseHelper.COL_AGE, 18);
long rowId = db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
Cursor cursor = db.query(
MyDatabaseHelper.TABLE_NAME,
new String[]{MyDatabaseHelper.COL_ID, MyDatabaseHelper.COL_NAME, MyDatabaseHelper.COL_AGE},
null,
null,
null,
null,
null
);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(MyDatabaseHelper.COL_ID));
String name = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COL_NAME));
int age = cursor.getInt(cursor.getColumnIndex(MyDatabaseHelper.COL_AGE));
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/271528.html
微信扫一扫
支付宝扫一扫