使用此代码.. 它从根目录开始,递归地遍历所有目录和子目录以在文本视图中打印文件名。
根据您的需要格式化文本输出。这是逻辑...
更新:好的,我忍不住自己尝试一下,这是工作代码。
这是 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++;
}
}
}
将此代码放在 Activity 中的任何位置,[在您的 onCreate() 中,例如]:
TextView fileNameTextView = (TextView)findViewById(R.id.thisfile);
File sdCardRoot = Environment.getExternalStorageDirectory();
new fileNames(sdCardRoot,fileNameTextView ,YourCurrentActivity.this).execute();