2012-02-24 4 views
0

ListAdapter経由ですべてのフォルダをsdcardにリストしようとしています。しかし、実行時の例外@item.add(file.getName() + "/");が発生しています。 File[]List<String>に変換するより良い方法はありますか?`File []`を `List <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

あなたは、拡張forループ使って、それが少し短くすることができます。

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

フィルタ 'filterDirectoriesOnly'は' sd.list() 'では動作しません。 –

+0

@BinoyBabu - そうだね、それはファイル名でフィルタリングできる場合にのみ機能します:\ –

+0

あなたはそれを行うために鍬を知っていますか? –

1

あなたは

プライベートリスト項目=ヌルbacauseランタイム例外を取得しています。

..

を初期化されることはありませんので、最初

+0

あなたは正しいですが、あなたはOPの回答 '' @Mr ' –

+0

リスト'に[]ファイルに変換するためのより良い方法を答えるされていません。 ..私は今それをしました.. – ngesh

0

が故に(あなたのリストを初期化します。..その初期設定以外..あ​​なたがやっている今まで何を

がちょうどいいようです。..追加を初期化例外)。しかしそれとは別に、私にはかなり大丈夫です。私はそれが少なくとも私がやることであることを意味します。私がここでお勧めするのは、関数内で変数File sdFileFilter filterdirectoriesOnlyを再インスタンス化しないということです。ユーザがディレクトリをクリックしてから新しいディレクトリ。だから私が言及した2つのオブジェクトは同じですが、あなたが電話するたびに再初期化されています。あなたは外にそれを移動することができます。

+0

私は1つのディレクトリatmだけを読み取る必要があります。ありがとう。 –

+0

あなたはかなり良いです。 –

関連する問題