溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android在代碼中如何使用SD卡

發布時間:2021-11-11 16:25:28 來源:億速云 閱讀:205 作者:柒染 欄目:移動開發

本篇文章給大家分享的是有關Android在代碼中如何使用SD卡,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1 SD 是否可用檢查

有兩種方式,一種是寫一個監聽函數,用來監聽

private final BroadcastReceiver broadcastRec = new BroadcastReceiver() {  @Override  public void onReceive(Context context, Intent intent) {  if (intent.getAction().equals("android.intent.action.MEDIA_MOUNTED")) { //SD 卡已經成功掛載  //有SD 卡  } else if (intent.getAction().equals("android.intent.action.MEDIA_REMOVED")  ||  intent.getAction().equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")  ||  intent.getAction().equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")) {//各種未掛載狀態  //無SD 卡     }   }  };

另一種在我看來,更簡單一些:

File f = new File("/sdcard/");  f.exists();

2 卡上數據的讀寫

在動手之前,我們先來看看,要對SD 卡進行讀寫操作,Android 為我們準備了哪些類/接口。

接口:FileFilter

:File、FileInputStream、FileOutputStream

下面我們依次對上面出場的做個簡單的介紹吧,同時,也會給出若干代碼來說明各個類如何使用

3 File

文件系統的一個抽象描述類,可以使用相對路徑和絕對路徑,該類提供了若干方法查詢/修改文件信息

File file = new File("/sdcard/a.txt");

判斷文件是否存在:

file.exists()

“文件”是目錄還是文件

file.isDirectory()

如果文件為目錄,如何列出子目錄呢?

File[ ] filefiles = file.listFiles();

對于文件,如果獲得文件的一些信息

file.length(); //文件的長度  file.canRead(); //文件可以讀嗎  file.canWrite(); //文件可以寫嗎  file.delete(); //刪除該文件

下面,給出一些片斷代碼來展示如何使用File 類

//創建一個新文件  File file = new File("/sdcard/a.txt");  if (!file.exists()) {  try {  file.createNewFile();  } catch (IOException e) {  e.printStackTrace();  } }  //創建一個新文件夾  File file = new File("/sdcard/a/b/c");  if (!file.exists()) {  try {  file.mkdirs();  }

請注意,mkdirs()和mkdir()的用法,mkdirs()表示,如果需要,會先創建上層目錄,如上述代碼中,如果SD 卡根目錄不存在目錄a,那么,使用mkdir()會拋出異常。

4 FileFilter

我們知道,listFiles()會列出當前目錄下的文件,但是,另一個問題出來了,如果當前目錄下文件雜亂無部分,而我們又不想列出所有文件,怎么辦?FileFilter 提供了一個解決方法。我們只需要實現public abstract boolean accept(File pathname)接口就可以了。

FileFilter filter = new FileFilter() {  public boolean accept (File file) {  if (file.isFile() && file.getAbsolutePath().toLowerCase().endsWith(".txt")) {  return true;  }  return false;  }  };  File[] filefiles = file.listFiles(filter);

以上代碼展示了如何只列出當前目錄下的TXT 文件。

5 FileInputStream

我們不僅需要對文件進行操作,還需要對文件的內容進行操作,這時候,FileInputStream 就登場了

FileInputStream 繼承自InputStream,但是FileInputStream 使用了緩沖,以提高頻繁讀入數據時的性能。

使用FileInputStream 也很簡單

FileInputStream fis = new FileInputStream("/sdcard/a.txt");  byte[ ] abytes = new byte[1024]  int len = fis.read(abytes);

在上述代碼中,我們打開了SD 卡根目錄下的a.txt 文件,同時,讀入1K 的數據,需要注意的是,read 并不能保
證一定讀入期望長度的數據,我們需要對讀入數據的長度進行檢查。

6 FileOutputStream

FileOutputStream 與OutputStream 的用法差不多,在些也不多說,給出一個代碼吧:  FileOutputStream fos = new FileOutputStream("/sdcard/a.txt");  fos.write("Hello World!".getBytes());  fos.flush();

上述代碼會向a.txt 中寫入Hello World 字符,請注意,FileOutputStream 也使用了緩沖,因此,數據不會立即寫入文件中,當系統認為需要寫回數據的時候,真正的寫回才發生,因此,如果為了讓數據立即寫回,需要使用flush()方法。

也許你會問到,我不想把文件原有的內容抹到,怎么?這個也簡單,

FileOutputStream fos = new FileOutputStream("/sdcard/a.txt", true);

true 表示向文件后面追加數據

以上就是Android在代碼中如何使用SD卡,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女