今天研究Android中檔案夾的檔案的擷取,有的時候我們的程式需要去對android的指定目錄或者全域目錄進行遍曆擷取其中的檔案,但是擷取檔案的時候可能會遇到無法列出檔案夾中的檔案的問題,這就是我出現的問題,對於某個子檔案夾進行擷取listFiles()的時候返回為NULL,也就是不允許列出檔案夾中內容。這個是由於android中的安全機制的緣故,由於android繼承了Linux系統的傳統,對於某個特定的目錄有使用者的許可權,一共分為三種--可讀,可寫,可執行;雖然說我們可以設定某個特定的目錄的許可權,但是對於目錄裡面的子目錄和子檔案都可以進行許可權的設定,也就是說出了根目錄許可權之外,子目錄本身的許可權也決定了子目錄可否訪問,這一點我們需要清楚瞭解,所以我們在判斷完了是否是目錄之外,我們還需要在進行listFiles()擷取File[]資料後判斷擷取的數組是否為空白,如果為空白的話,檔案夾是不可訪問的。範例代碼如下:
package com.zys.file;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.util.Log;
/**
* @author
* function 用於掃描SD卡上的檔案
*
*/
public class FileScan {
private static final String TAG = "FileScan";
public HashMap<String, String> getMusicListOnSys(File file) {
//從根目錄開始掃描
Log.i(TAG, file.getPath());
HashMap<String, String> fileList = new HashMap<String, String>();
getFileList(file, fileList);
return fileList;
}
/**
* @param path
* @param fileList
* 注意的是並不是所有的檔案夾都可以進行讀取的,許可權問題
*/
private void getFileList(File path, HashMap<String, String> fileList){
//如果是檔案夾的話
if(path.isDirectory()){
//返迴文件夾中有的資料
File[] files = path.listFiles();
//先判斷下有沒有許可權,如果沒有許可權的話,就不執行了
if(null == files)
return;
for(int i = 0; i < files.length; i++){
getFileList(files[i], fileList);
}
}
//如果是檔案的話直接加入
else{
Log.i(TAG, path.getAbsolutePath());
//進行檔案的處理
String filePath = path.getAbsolutePath();
//檔案名稱
String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
//添加
fileList.put(fileName, filePath);
}
}
}