详解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技术站