2012-02-24 40 views
0

我試圖通過ListAdapter列出SD卡中的所有文件夾。但我得到運行時異常@item.add(file.getName() + "/");。有沒有更好的方法將File[]轉換爲List<String>一個更好的方法來轉換文件`[]``到列表<String>`

private List <String>  item = null; 

String extState = Environment.getExternalStorageState(); 
if (!extState.equals(Environment.MEDIA_MOUNTED)) { 
    .... 
} else { 
    File sd = Environment.getExternalStorageDirectory(); 
    FileFilter filterDirectoriesOnly = new FileFilter() { 
     public boolean accept(File file) { 
      return file.isDirectory(); 
     } 
    }; 
    File[] sdDirectories = sd.listFiles(filterDirectoriesOnly); 
    for (int i = 0; i < sdDirectories.length; i++) { 
     File file = sdDirectories[i]; 
     item.add(file.getName() + "/"); 
    } 
    ArrayAdapter <String> fileList = new ArrayAdapter <String>(this, R.layout.row, item); 
    setListAdapter(fileList); 
} 

回答

1

您可以通過使用循環增強其短一點:

File[] sdDirectories = sd.listFiles(filterDirectoriesOnly); 
for (File file : sdDirectories) 
{ 
    item.add(file.getName() + "/"); 
} 

有一個method to get file names directly,但他們不會有你的尾隨/,你必須能夠通過文件名過濾:

String[] fileNames = sd.list(fileNameFilter); 
List<String> fileNamesList = Arrays.asList(fileNames); 
+0

filter'filterDirectoriesOnly'不能與'sd.list()'一起使用。 – 2012-02-24 05:15:05

+0

@BinoyBabu - 你說得對,那只有在你可以通過文件名進行過濾時纔有效:\ – 2012-02-24 15:19:44

+0

你知道鋤頭要做到嗎? – 2012-02-24 15:37:19

1

你得到的運行時異常bacause

私人列表項= NULL;

從未初始化..

所以首先初始化,然後添加..

你在做什麼都顯得恰到好處..除了初始化..

+0

你是對的,但你沒有回答OP答案..一個更好的辦法來'文件[]''到列表' – 2012-02-24 04:58:37

+0

@Mr轉換。 ..我現在做了.. – ngesh 2012-02-24 05:05:50

0

初始化列表(因此例外)。但除此之外,對我來說看起來非常好。我的意思是,至少我會做什麼。我會推薦這裏唯一的事情是,你不要再實例化函數中的變量File sdFileFilter filterdirectoriesOnly,因爲我相信你會一次又一次地調用它作爲一個目錄的用戶點擊,然後加載搜索的新目錄。所以我提到的兩個對象是相同的,但每次撥打電話時都會重新初始化。你可以把它移到外面。

+0

我只需要讀取一個目錄atm。謝謝。 – 2012-02-24 05:02:27

+0

然後,你幾乎可以走了。 – 2012-02-24 05:04:42

相關問題