扫描目录并在textview中显示

时间:2012-07-18 09:03:53

标签: java android

我正在递归扫描目录,但我想在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());


    }
}

1 个答案:

答案 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();