我正在递归扫描目录,但我想在TextView中显示扫描文件。我正在使用一个线程,但我无法在textView中显示文件名。 你能举个例子说明怎么做吗?
new Thread(new Runnable() {
public void run(){
fw.walk(new File("/"));
}
}).start();
for (File f : list) {
if (f.isDirectory()) {
walk(f);
} else {
Log.d("sdf", "File: " + f.getAbsoluteFile());
}
}
答案 0 :(得分:1)
使用此代码..它从根目录开始,递归遍历所有目录和子目录,以在文本视图中打印文件名。
根据需要设置文本输出格式。这是逻辑......
更新:好的,我无法抗拒自己尝试,这是工作代码。
这是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();