0

ディレクトリを再帰的にスキャンしているのですが、スキャンしたファイルを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());


    }
}
4

1 に答える 1

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++;

         }

    }
    }

このコードをアクティビティの任意の場所に配置します[in your onCreate(),say ]:

TextView fileNameTextView = (TextView)findViewById(R.id.thisfile);
File sdCardRoot = Environment.getExternalStorageDirectory();
new fileNames(sdCardRoot,fileNameTextView ,YourCurrentActivity.this).execute();
于 2012-07-18T09:22:40.037 に答える