Android编程之在SD卡上进行文件读写操作实例详解
在Android应用程序开发中,对SD卡进行文件读写操作是一个常见的需求,本文将详细介绍如何在Android应用中实现这些操作,并提供相应的代码示例。
一、权限管理
在Android 6.0(API级别23)及以上版本,应用程序需要在运行时请求用户授权,才能访问SD卡,首先需要在AndroidManifest.xml
文件中添加以下权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然后在代码中检测权限状态,并在权限缺失时向用户请求权限:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 权限未被授予,需要请求权限 ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); }
处理权限请求的回调:
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_WRITE_STORAGE: { // 如果请求被取消,则结果数组为空 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被授予,执行相关操作 } else { // 权限被拒绝,告知用户无需权限的功能 } return; } } }
二、获取SD卡路径
在Android系统中,可以通过Environment
类获取外部存储的根目录:
String sdCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();
从Android 10(API级别29)开始,建议使用特定的应用目录来存储数据,而不是直接访问外部存储的根路径:
File externalFilesDir = context.getExternalFilesDir(null);
三、创建文件夹和文件
创建文件夹
在SD卡上创建文件夹可以使用File
类的mkdirs()
方法:
public File createDirOnSDCard(String dir) { File dirFile = new File(sdCardRoot + File.separator + dir + File.separator); Log.v("createDirOnSDCard", sdCardRoot + File.separator + dir + File.separator); dirFile.mkdirs(); return dirFile; }
创建文件
在SD卡上创建文件可以使用File
类的createNewFile()
方法:
public File createFileOnSDCard(String fileName, String dir) throws IOException { File file = new File(sdCardRoot + File.separator + dir + File.separator + fileName); Log.v("createFileOnSDCard", sdCardRoot + File.separator + dir + File.separator + fileName); file.createNewFile(); return file; }
四、判断文件是否存在
可以使用File
类的exists()
方法来判断SD卡上的某个文件是否存在:
public boolean isFileExist(String fileName, String path) { File file = new File(sdCardRoot + path + File.separator + fileName); return file.exists(); }
五、写入数据到文件
将数据写入到SD卡指定目录文件可以使用FileOutputStream
类:
public File writeData2SDCard(String path, String fileName, InputStream data) { File file = null; OutputStream output = null; try { createDirOnSDCard(path); // 创建目录 file = createFileOnSDCard(fileName, path); // 创建文件 output = new FileOutputStream(file); byte buffer[] = new byte[2 * 1024]; // 每次写2K数据 int temp; while ((temp = data.read(buffer)) != -1) { output.write(buffer, 0, temp); } output.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { output.close(); // 关闭数据流操作 } catch (Exception e2) { e2.printStackTrace(); } } return file; }
六、读取文件数据
读取SD卡上的文件数据可以使用FileInputStream
类:
public String readDataFromSDCard(String path, String fileName) { File file = new File(sdCardRoot + path + File.separator + fileName); StringBuilder stringBuilder = new StringBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { stringBuilder.append(line).append(" "); } br.close(); } catch (IOException e) { e.printStackTrace(); } return stringBuilder.toString(); }
七、删除文件或文件夹
可以使用File
类的delete()
方法来删除文件或文件夹:
public boolean deleteFileOrFolder(String path) { File file = new File(sdCardRoot + path); if (file.exists()) { // 判断文件或文件夹是否存在 if (file.delete()) { // 删除文件或文件夹(如果删除成功) Log.d("Delete file", "Deleted successfully"); return true; } else { // 删除失败(权限不足或磁盘空间不足等原因) Log.d("Delete file", "Failed to delete"); return false; } } else { // 文件或文件夹不存在 Log.d("Delete file", "File not found"); return false; } }
通过以上步骤,我们可以在Android应用中实现对SD卡的文件读写操作,需要注意的是,随着Android版本的更新,对外部存储的访问方式可能会有所变化,开发者应根据实际情况进行调整。
小伙伴们,上文介绍了“Android编程之在SD卡上进行文件读写操作实例详解”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/638704.html