详解Android 中的文件存储

详解Android 中的文件存储

在 Android 应用中,文件存储是很常见的操作。本文将详细讲解 Android 中的文件存储,包括它们的类型、使用场景和相关 API 函数等。其中,包括两个示例说明。

文件存储的类型

Android 中的文件存储系统分为了内部存储和外部存储两种类型。

内部存储

内部存储是指应用的私有存储空间。它仅能被应用程序本身读取或写入,其他应用是无法访问的。内部存储使用的是设备存储(例如固态硬盘或闪存),在应用安装时自动创建。

内部存储可分为以下两种类型:

  • 应用程序内部存储:应用程序内部存储通常用于存储与应用程序相关的文件,例如 AndroidManifest.xml 文件、SQLite 数据库、SharedPreferences 等。它们存储在设备的 /data/data// 目录中,其中 是应用程序的包名。
  • 内部存储 cache 目录:这个目录用于存放临时文件,这些文件通常不需要长期保存。例如,网络请求数据缓存、图片缓存等。这个目录的文件是随时可以被系统删除的,因此不应该将重要数据保存在此目录中。cache 目录存储在 /data/data//cache 目录中。

外部存储

外部存储是指设备上的公共存储空间。它可以被多个应用程序所读取或写入。Android 设备通常会提供一张 SD 卡作为外部存储,而有些设备则可能将 SD 卡模拟成内部存储。

外部存储可分为以下两种类型:

  • 共享存储:应用程序可以安全地访问的公共文件,包括照片、媒体文件等。当应用程序请求访问共享存储时,Android 系统会显示一个系统 UI,请求用户授权。共享存储存储在 /storage/emulated/0 目录中。
  • 其他应用私有存储:其他应用程序创建的私有文件目录,与当前应用程序无法直接通信。其他应用程序私有存储可以是外部存储器上文件夹的子目录(例如 /storage/emulated/0/Android/data//files/ 目录),或者其他存储位置上的子目录(例如 SD 卡上的 /Android/data//files/ 目录)。

内部存储的使用

使用内部存储时,应用程序可以使用 Context 对象的 openFileInput() 和 openFileOutput() 方法读写文件。

读取内部存储文件

下面是读取内部存储文件的示例代码:

try {
    FileInputStream fileInputStream = openFileInput("myFile.txt");
    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    StringBuilder stringBuilder = new StringBuilder();

    String line;
    while ((line = bufferedReader.readLine()) != null) {
        stringBuilder.append(line).append("\n");
    }

    fileInputStream.close();
    String content = stringBuilder.toString();
} catch (IOException e) {
    e.printStackTrace();
}

写入内部存储文件

下面是写入内部存储文件的示例代码:

String data = "This is my file content";
try {
    FileOutputStream fileOutputStream = openFileOutput("myFile.txt", Context.MODE_PRIVATE);
    fileOutputStream.write(data.getBytes());
    fileOutputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

外部存储的使用

使用外部存储时,应用程序需要获得访问权限,并使用标准的 Java I/O 操作读写文件。

请求访问共享外部存储

下面是请求访问共享外部存储的示例代码:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.READ_EXTERNAL_STORAGE)) {
        // 用户已经拒绝过权限申请,并且没有勾选“不再询问”选项
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }
} else {
    // 已经有权限,可以访问外部存储了
}

读取外部存储文件

下面是从外部存储读取文件的示例代码:

String filePath = Environment.getExternalStorageDirectory() + "/myFile.txt";
File file = new File(filePath);

String content = null;
if (file.exists()) {
    StringBuilder stringBuilder = new StringBuilder();
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }
        fileInputStream.close();
        content = stringBuilder.toString();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

写入外部存储文件

下面是向外部存储写入文件的示例代码:

String filePath = Environment.getExternalStorageDirectory() + "/myFile.txt";
File file = new File(filePath);

if (!file.exists()) {
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

String data = "This is my file content";
try {
    FileWriter fileWriter = new FileWriter(file);
    fileWriter.write(data);
    fileWriter.close();
} catch (IOException e) {
    e.printStackTrace();
}

总结

本文详细讲解了 Android 中的文件存储,包括内部存储和外部存储两种类型。内部存储只能被应用程序自身访问,而外部存储可以被多个应用程序访问。对于内部存储,应用程序可以使用 openFileInput() 和 openFileOutput() 方法读写文件。对于外部存储,应用程序需要获取权限,并使用标准的 Java I/O 操作读写文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Android 中的文件存储 - Python技术站

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

相关文章