2012-07-18 33 views
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()); 


    } 
} 
+1

發佈您的代碼,你有什麼早期的嘗試? – user370305 2012-07-18 09:04:32

+2

您是否威脅應用程序正常工作? :-) – aioobe 2012-07-18 09:05:16

+0

對不起@aioobe,不得不修復它:P – theomega 2012-07-18 09:10:39

回答

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

     } 

    } 
    } 

在活動把這個代碼的任何地方,[在你的onCreate(),說]:

TextView fileNameTextView = (TextView)findViewById(R.id.thisfile); 
File sdCardRoot = Environment.getExternalStorageDirectory(); 
new fileNames(sdCardRoot,fileNameTextView ,YourCurrentActivity.this).execute(); 
+0

I知道如何掃描目錄,但我想在TextView中顯示掃描文件的名稱。 – 2012-07-18 09:25:12

+0

我有2個類:MainActivity和FileScanner。我在線程中調用了FileScanner的方法(即掃描目錄),我想在Textview中顯示文件的名稱(例如R.id.thisfile)。我怎樣才能做到這一點? – 2012-07-18 09:27:04

+0

看到編輯... – 2012-07-18 09:28:34