问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android存储文件详解:内部存储、外部存储与SQLite数据库

创作时间:
作者:
@小白创作中心

Android存储文件详解:内部存储、外部存储与SQLite数据库

引用
1
来源
1.
https://www.kdun.com/ask/1610396.html

在Android开发中,存储文件是一个常见的需求,无论是保存用户数据、缓存图像还是记录日志,了解如何在Android中有效地存储文件至关重要。本文将详细介绍Android中的文件存储机制,包括内部存储和外部存储的使用。

内部存储(Internal Storage)

内部存储是设备上私有的、应用独有的存储空间,它通常用于保存应用的私有数据,这些数据默认不对其他应用可见。

访问内部存储

要访问内部存储,可以使用 Context.openFileOutput() 方法来创建或打开一个文件输出流。

FileOutputStream fos = openFileOutput("example.txt", MODE_PRIVATE);

这里,"example.txt" 是文件名,MODE_PRIVATE 表示该文件是私有的,只能由当前应用访问。

读取内部存储文件

要读取内部存储的文件,可以使用 Context.openFileInput() 方法。

FileInputStream fis = openFileInput("example.txt");

这将返回一个 FileInputStream,你可以使用它来读取文件内容。

内部存储路径

内部存储文件默认存储在 /data/data/<package_name>/files/ 目录下,你可以通过以下方式获取这个目录:

File directory = getFilesDir(); // 返回 /data/data/<package_name>/files 目录

外部存储(External Storage)

外部存储是指设备的SD卡或其他可插拔的存储介质,与内部存储不同,外部存储是非私有的,其他应用也可以访问这些文件。

检查外部存储可用性

在尝试访问外部存储之前,应该先检查其是否可用:

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
    // 外部存储可用
}

访问外部存储

要访问外部存储,可以使用 Environment.getExternalStorageDirectory() 方法获取根目录:

File externalStorage = Environment.getExternalStorageDirectory();
File myFile = new File(externalStorage, "example.txt");

注意:从Android 6.0(API级别23)开始,访问外部存储需要动态请求权限,你需要在 AndroidManifest.xml 中声明权限,并在运行时请求用户授权。

写入外部存储

要写入外部存储,可以使用标准的Java I/O类,如 FileOutputStream

FileOutputStream fos = new FileOutputStream(myFile);

读取外部存储文件

类似地,读取外部存储文件可以使用 FileInputStream

FileInputStream fis = new FileInputStream(myFile);

使用SQLite数据库存储数据

除了直接存储文件,Android还提供了轻量级的SQLite数据库来存储结构化数据,SQLite数据库适用于需要复杂查询和事务处理的场景。

创建数据库

要创建一个SQLite数据库,首先需要继承 SQLiteOpenHelper 类并实现 onCreate()onUpgrade() 方法:

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;
    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表
        db.execSQL("CREATE TABLE example (id INTEGER PRIMARY KEY, name TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 升级数据库
        db.execSQL("DROP TABLE IF EXISTS example");
        onCreate(db);
    }
}

操作数据库

要操作数据库,可以使用 SQLiteDatabase 对象执行SQL命令:

MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "John Doe");
db.insert("example", null, values);

FAQs

Q1: 如何请求外部存储权限?

A1: 从Android 6.0开始,需要在运行时请求外部存储权限,你可以在 Activity 中通过以下方式请求权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}

其中 REQUEST_CODE 是你定义的请求码,用于在回调方法中识别这次权限请求。

Q2: 如何删除内部存储中的文件?

A2: 要删除内部存储中的文件,可以使用 Context.deleteFile() 方法:

boolean deleted = deleteFile("example.txt");
if (deleted) {
    Log.d("MyApp", "文件已删除");
} else {
    Log.d("MyApp", "文件删除失败");
}

这将尝试删除名为 "example.txt" 的文件,并返回一个布尔值表示操作是否成功,如果文件不存在或无法删除,将返回 false

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号