Android 4.4高效文件存储策略与实践教程

Android 4.4高效文件存储策略与实践教程
引言
在Android开发中,文件存储是一个不可或缺的环节。无论是存储用户数据、缓存文件还是管理媒体资源,高效的文件存储策略都能显著提升应用的性能和用户体验。本文将深入探讨Android 4.4及更高版本中的高效文件存储策略,并通过实践教程帮助开发者掌握这些技巧。
一、Android文件存储概述
1.1 内部存储与外部存储
内部存储
:位于
/data/data//
目录下,仅供应用自身访问,安全性高。
外部存储
:可以是SD卡或机身自带的外部存储,路径通常为
/storage/
,访问需权限。
1.2 文件存储方式
文件存储
:直接将数据写入文件。
SharedPreferences存储
:用于存储键值对。
数据库存储
:使用SQLite数据库存储结构化数据。
二、高效文件存储策略
2.1 选择合适的存储位置
内部存储
:适合存储敏感数据,如用户登录信息。
外部存储
:适合存储大文件,如图片、视频。
2.2 文件操作模式
MODE_PRIVATE
:覆盖同名文件。
MODE_APPEND
:在文件末尾追加数据。
2.3 使用MediaStore访问文件
Android 10及以上版本推荐使用
MediaStore
访问外部存储,避免直接使用文件路径。
三、实践教程
3.1 创建项目
打开Android Studio,创建一个新的项目,选择API级别为19(Android 4.4)。
3.2 权限请求
在
AndroidManifest.xml
中添加外部存储权限:


3.3 文件存储示例
3.3.1 内部存储
public void saveToFileInternal(String data) {
try {
FileOutputStream fos = openFileOutput(“example.txt”, MODE_PRIVATE);
fos.write(data.getBytes());
fos.close();
Toast.makeText(this, “保存成功”, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}

public String readFromFileInternal() {
StringBuilder sb = new StringBuilder();
try {
FileInputStream fis = openFileInput(“example.txt”);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
3.3.2 外部存储
public void saveToFileExternal(String data) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return;
}
File file = new File(Environment.getExternalStorageDirectory(), “example.txt”);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data.getBytes());
fos.close();
Toast.makeText(this, “保存成功”, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}

public String readFromFileExternal() {
File file = new File(Environment.getExternalStorageDirectory(), “example.txt”);
StringBuilder sb = new StringBuilder();
try {
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
3.4 使用MediaStore访问文件
3.4.1 获取图片文件
public void getImages() {
ContentResolver contentResolver = getContentResolver();
Uri imagesUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME};
Cursor cursor = contentResolver.query(imagesUri, projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
Uri contentUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Log.d(“Image”, “Name: ” + name + “, URI: ” + contentUri);
}
cursor.close();
}
}
3.5 UI界面实现
在
activity_main.xml
中添加按钮和文本框: