Android存储卡读写文件与Application数据保存的实现介绍

Android存储卡读写文件与Application数据保存的实现介绍

1. 前言

在Android应用中,数据的存储方式主要有两种:一种是在应用内部存储中存储数据,另一种是在外部存储中存储数据。其中,存储方式不同,所需要的权限和操作也略有差异。本文将对Android存储卡读写文件与Application数据保存的实现做一个全面的介绍,包括使用示例。

2. Android存储卡读写文件

2.1 读取外部存储中的文件

在Android中,读取外部存储中的文件需要获取相应的存储权限。根据应用所需的读写权限不同,可细分为:

  • 读取外部存储的公共目录(无需请求存储权限)
  • 读取外部存储的私有目录(需要请求存储权限)

2.1.1 读取外部存储的公共目录

外部存储的公共目录包括:

  • Environment.getExternalStoragePublicDirectory()目录方法返回的一些常用的公共目录,如“/sdcard/Pictures”,“/sdcard/Music”等。
  • MediaStore.Images、MediaStore.Audio、MediaStore.Video等系统媒体库目录。

读取外部存储的公共目录的代码如下所示:

// 读取图片目录中的文件
File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File[] pictureFiles = pictureDir.listFiles();
for (File file : pictureFiles) {
    // 处理文件
}

2.1.2 读取外部存储的私有目录

在Android中,每个应用有自己的私有目录,可以在其中存储和访问自己的文件。相比于读取公共目录,读取私有目录需要请求外部存储读写权限。

请求外部存储读写权限的代码如下所示:

// 判断读写权限是否已经被授予
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) {
    // 请求读写权限
    ActivityCompat.requestPermissions(activity,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            REQUEST_CODE);
} else {
    // 读取私有目录中的文件
    File privateDir = context.getExternalFilesDir(null);
    File[] privateFiles = privateDir.listFiles();
    for (File file : privateFiles) {
        // 处理文件
    }
}

2.2 写入外部存储中的文件

写入外部存储中的文件需要请求外部存储读写权限。需要注意的是,因为外部存储是与其他应用共享的,所以请务必遵守安卓的数据存储最佳实践,例如不要将敏感数据存储在外部存储中。

写入外部存储的代码如下所示:

// 判断读写权限是否已经被授予
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) {
    // 请求读写权限
    ActivityCompat.requestPermissions(activity,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            REQUEST_CODE);
} else {
    // 写入文件到私有目录
    File privateDir = context.getExternalFilesDir(null);
    File file = new File(privateDir, "example.txt");
    try {
        FileOutputStream outputStream = new FileOutputStream(file);
        outputStream.write("Hello, world!".getBytes());
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3. Application数据保存

Android中,可以使用多种不同的方式存储应用程序数据,例如:

  • SharedPreferences:用于存储简单的键值对数据。
  • SQLite数据库:用于存储结构化的数据。
  • 文件存储:用于存储文本、图片、媒体等不适合放在数据库中的数据。

3.1 SharedPreferences

SharedPreferences 提供了一种轻量级的数据存储方式,用于存储应用程序的配置信息和少量的其他数据。SharedPreferences是一个接口,其中存储的数据是以键值对的形式存储的。

读取SharedPreferences中的数据的示例代码如下所示:

SharedPreferences preferences = getSharedPreferences("example", Context.MODE_PRIVATE);
String username = preferences.getString("username", "");
int age = preferences.getInt("age", 0);

写入SharedPreferences中的数据的示例代码如下所示:

SharedPreferences preferences = getSharedPreferences("example", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", "张三");
editor.putInt("age", 18);
editor.apply();

3.2 SQLite数据库

SQLite数据库是Android操作系统的标准数据库,用于存储大量结构化数据。Android提供了SQLiteOpenHelper类,用于创建和管理SQLite数据库。

创建SQLiteOpenHelper类的示例代码如下所示:

public class ExampleDatabaseHelper extends SQLiteOpenHelper {

  private static final String DATABASE_NAME = "example.db";
  private static final int DATABASE_VERSION = 1;

  public ExampleDatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    // 创建数据库表
    db.execSQL("CREATE TABLE `user` (" +
                    "`id` INTEGER PRIMARY KEY AUTOINCREMENT," +
                    "`username` TEXT," +
                    "`age` INTEGER" +
                    ")");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // 数据库升级
    db.execSQL("DROP TABLE IF EXISTS `user`");
    onCreate(db);
  }

}

对SQLite数据库进行增删改查的示例代码如下所示:

// 插入数据
ExampleDatabaseHelper databaseHelper = new ExampleDatabaseHelper(context);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("username", "张三");
values.put("age", 18);
db.insert("user", null, values);
db.close();

// 查询数据
List<User> userList = new ArrayList<>();
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("user", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
    do {
        int id = cursor.getInt(cursor.getColumnIndex("id"));
        String username = cursor.getString(cursor.getColumnIndex("username"));
        int age = cursor.getInt(cursor.getColumnIndex("age"));
        User user = new User(id, username, age);
        userList.add(user);
    } while (cursor.moveToNext());
}
cursor.close();
db.close();

// 更新数据
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", 20);
db.update("user", values, "username = ?", new String[]{"张三"});
db.close();

// 删除数据
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("user", "username = ?", new String[]{"张三"});
db.close();

3.3 文件存储

文件存储适用于储存文本、图片、音频和视频等数据。文件存储对于小文件和常见的媒体文件非常有效。

读取文件的示例代码如下所示:

File file = new File(context.getExternalFilesDir(null), "example.txt");
try {
    InputStream inputStream = new FileInputStream(file);
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        // 处理数据
    }
    bufferedReader.close();
    inputStreamReader.close();
    inputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

写入文件的示例代码如下所示:

File file = new File(context.getExternalFilesDir(null), "example.txt");
try {
    FileOutputStream outputStream = new FileOutputStream(file);
    outputStream.write("Hello, world!".getBytes());
    outputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

4. 总结

本文介绍了Android存储卡读写文件与Application数据保存的实现方法,分别介绍了读写外部存储、SharedPreferences、SQLite数据库、文件存储。在开发Android应用时,请合理选择存储方式,并根据使用情况谨慎处理用户数据,保证数据的安全性和隐私性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android存储卡读写文件与Application数据保存的实现介绍 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 若依管理系统ruoyi-vue(二):权限系统设计详解

    若依管理系统ruoyi-vue(二):权限系统设计详解 在Ruoyi-Vue中,权限系统是非常重要的一部分。本文将详细讲解Ruoyi-V的权限系统设计,包括权限管理、角色管理、菜单管理等内容。 权限管理 在Ruoyi-Vue中,权限是指用户系统中某些资源的访问权限。Ruoyi-Vue使用RBAC(Role-Based Access Control)模型来管理…

    other 2023年5月7日
    00
  • Python还能这么玩之用Python修改了班花的开机密码

    下面是用Python修改班花的开机密码的完整攻略: 一、准备工作 首先需要一个能够编辑Python代码的文本编辑器,比如VS Code、Sublime、PyCharm等。 班花电脑需要开启管理员权限。 需要安装Python,建议安装Python3版本。 二、获取管理员权限 因为我们需要修改班花的开机密码,所以需要获取管理员权限。可以通过创建一个名为”cmd-…

    other 2023年6月27日
    00
  • offsetparent的解释

    offsetParent的解释 在HTML文档中,offsetParent是一个DOM属性,它指向最近的已定位的祖先元素(position不为static)。我们可以使用offsetParent来计算元素的相对位置。 offsetParent的特征 offsetParent的默认值是html元素本身 如果元素的父元素中没有定义position属性或者定义的p…

    其他 2023年3月29日
    00
  • WPS中英文小写字母怎么快速转换成大写字母?

    在WPS中,你可以使用以下方法快速将小写字母转换为大写字母: 使用快捷键:你可以使用快捷键将选定的小写字母转换为大写字母。首先,选中你想要转换的小写字母,然后按下\”Ctrl\”和\”Shift\”键,并同时按下字母\”X\”。例如,如果你想将字母\”a\”转换为\”A\”,你可以选中它,然后按下\”Ctrl+Shift+X\”。 使用函数:WPS提供了一个…

    other 2023年8月17日
    00
  • 易我数据恢复向导V2.0绿色特别版下载

    来讲解一下“易我数据恢复向导V2.0绿色特别版下载”的完整攻略,具体步骤如下: 第一步:访问易我官网 首先,您需要访问易我官网。您可以在搜索引擎中搜索“易我数据恢复向导官网”进入官网主页。在主页中找到“下载中心”的入口,进入下载中心页面。 第二步:选择下载版本 在下载中心页面,您可以看到多个版本的易我数据恢复向导。根据您的需求选择“易我数据恢复向导V2.0绿…

    other 2023年6月27日
    00
  • npm run dev失败的简单解决办法

    解决 \”npm run dev\” 失败的简单方法攻略 当你运行 npm run dev 命令时,如果出现错误,可能是由于多种原因引起的。下面是一些常见的问题和解决方法,希望能帮助你解决问题。 1. 检查依赖项 首先,确保你的项目的依赖项已经正确安装。你可以运行以下命令来安装依赖项: npm install 如果依赖项已经安装,你可以尝试删除 node_m…

    other 2023年8月3日
    00
  • 如何重置Win10固定到开始菜单磁贴布局? 恢复初始布局的办法

    如何重置Win10固定到开始菜单磁贴布局?恢复初始布局的办法 如果你想重置Windows 10开始菜单的磁贴布局并恢复到初始状态,你可以按照以下步骤进行操作: 打开开始菜单:点击任务栏左下角的Windows图标或按下Windows键。 进入开始菜单布局编辑模式:在开始菜单中,右键点击任意一个磁贴,然后选择“解锁”选项。这将允许你对开始菜单进行编辑。 重置磁贴…

    other 2023年9月5日
    00
  • Android App仿QQ制作Material Design风格沉浸式状态栏

    Android App仿QQ制作Material Design风格沉浸式状态栏攻略 1. 简介 在本攻略中,我们将学习如何制作一个仿QQ的Android应用,使用Material Design风格,并实现沉浸式状态栏效果。沉浸式状态栏是指将状态栏与应用界面融为一体,提供更加流畅的用户体验。 2. 实现步骤 2.1 添加依赖库 首先,我们需要在项目的build…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部