一、文件讀寫權限簡介
在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
微信掃一掃
支付寶掃一掃