Android讀寫文件許可權相關知識點

一、文件讀寫許可權簡介

在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-tw/n/307315.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Python如何導入py文件

    Python是一種開源的高級編程語言,因其易學易用和強大的生態系統而備受青睞。Python的import語句可以幫助用戶將一個模塊中的代碼導入到另一個模塊中,從而實現代碼的重用。本…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python寫文件a

    Python語言是一種功能強大、易於學習、通用並且高級編程語言,它具有許多優點,其中之一就是能夠輕鬆地進行文件操作。文件操作在各種編程中都佔有重要的位置,Python作為開發人員常…

    編程 2025-04-29

發表回復

登錄後才能評論