このコードを使用してください。ルート ディレクトリから開始し、すべてのディレクトリとサブディレクトリを再帰的に反復して、テキスト ビューにファイル名を出力します。
必要に応じてテキスト出力をフォーマットします。これがロジックです...
更新:さて、私は自分で試してみることに抵抗できませんでした。これが実際のコードです。
これが AsyncTask 内部クラスです。ファイル名を表示する必要がある textView があるアクティビティで定義します。AsyncTask クラスは上記の関数を使用するため、同じアクティビティ内でそのままにしておきます。
private class fileNames extends AsyncTask<String, Integer, String> {
TextView tv,tv_temp;
File f;
ProgressDialog pg;
public fileNames(File f,TextView tv, Context c) {
this.f=f;
this.tv=tv;
tv_temp=new TextView(c);
pg =new ProgressDialog(c);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pg.setTitle("loading");
pg.show();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
System.out.println("Start : fileNames : doInBackground");
printFileNames(f,tv_temp);
return tv_temp.getText().toString();
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
tv.setText(result);
pg.dismiss();
}
}
機能定義:
public void printFileNames(File fName,TextView tv){
int count=0;
if(fName.listFiles()!=null)
for (File f : fName.listFiles()) {
if (f.isDirectory()){
String name = f.getName();
System.out.println("Dir:"+ name + "\n" );
tv.setText(tv.getText().toString()+"\n" + "Dir:"+ name + "\n" );
printFileNames(f, tv);
}else{
String name = f.getName();
System.out.println(" File:"+ name +"\n" );
tv.setText(tv.getText().toString()+ " File:"+ name +"\n" );
count++;
}
}
}
このコードをアクティビティの任意の場所に配置します[in your onCreate(),say ]:
TextView fileNameTextView = (TextView)findViewById(R.id.thisfile);
File sdCardRoot = Environment.getExternalStorageDirectory();
new fileNames(sdCardRoot,fileNameTextView ,YourCurrentActivity.this).execute();