一、文件讀寫權限簡介
在Android系統中,應用程序之間的文件訪問權限是獨立的,每個應用程序都只能訪問自己的數據,如果需要訪問其他應用程序的數據,則需要通過特定的權限來訪問。在Android平台中,每個應用程序都有一個私有的文件系統,只有該應用程序才能訪問。
Android 6.0(API 23)引入了運行時權限的概念,包括文件讀寫權限。如果應用程序需要讀寫外部存儲器上的文件,就需要在運行時請求相應的權限。否則,當應用程序嘗試讀寫外部存儲器時,Android系統會引發SecurityException。
二、文件讀寫權限的獲取
Android 6.0之前,應用程序在安裝的時候會自動獲取系統默認授權,而且不需要用戶的確認。如果開發者在應用程序中使用了訪問外部存儲器上文件的相關API,就會自動獲得相應的權限。
// 判斷是否有讀取外部存儲器的權限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 沒有權限,請求權限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } else { // 已經有權限,進行文件讀取操作 readExternalStorage(); }
Android 6.0及以後版本,需要在運行時請求相應的權限。以下代碼演示了如何請求讀取外部存儲器的權限:
private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1; // 請求權限的回調結果處理 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: { // 判斷用戶是否授權 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 授權成功,繼續執行操作 readExternalStorage(); } else { // 授權失敗,提示用戶打開權限管理頁面打開該權限 Toast.makeText(this, "無法讀取外部存儲器,請檢查是否已授權", Toast.LENGTH_LONG) .show(); } return; } } } // 判斷是否有讀取外部存儲器的權限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 沒有權限,請求權限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } else { // 已經有權限,進行文件讀取操作 readExternalStorage(); }
三、讀取文件
Android系統提供了以下方法用於讀取文件:
- Context.openFileInput(String name):用於打開一個文件並返回一個指向該文件的輸入流
- FileInputStream(File file):根據一個File對象打開一個文件並返回一個指向該文件的輸入流
- FileInputStream(String path):根據一個文件路徑打開一個文件並返回一個指向該文件的輸入流
示例代碼如下:
String filename = "test.txt"; FileInputStream fis = null; try { fis = openFileInput(filename); byte[] buffer = new byte[fis.available()]; fis.read(buffer); String result = new String(buffer); Log.d(TAG, result); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
四、寫入文件
Android系統提供了以下方法用於寫入文件:
- Context.openFileOutput(String name, int mode):用於打開一個文件並返回一個指向該文件的輸出流
- FileOutputStream(File file):根據一個File對象打開一個文件並返回一個指向該文件的輸出流
- FileOutputStream(String path):根據一個文件路徑打開一個文件並返回一個指向該文件的輸出流
示例代碼如下:
String filename = "test.txt"; String data = "Hello, world!"; FileOutputStream fos = null; try { fos = openFileOutput(filename, Context.MODE_PRIVATE); fos.write(data.getBytes()); Log.d(TAG, "Write file successfully."); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }
五、總結
本文主要介紹了Android中文件讀寫權限的相關知識點,包括文件讀寫權限的簡介、權限的獲取、讀取文件和寫入文件。文件讀寫是Android應用程序中非常基礎的功能,學好文件讀寫權限相關知識對學習Android開發非常重要。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/307315.html