2012-07-18 4 views
0

나는 반복적으로 디렉토리를 스캔하지만 스캔 한 파일을 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

+2

응용 프로그램이 제대로 작동하겠습니까? :-) – aioobe

+0

죄송합니다 @aioobe, 그것을 고쳐야했습니다 : P – theomega

답변

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

디렉토리를 스캔하는 방법을 알고 있지만, TextView에 스캔 한 파일의 이름을 표시하고 싶습니다. –

+0

나는 MainActivity와 FileScanner의 두 클래스를 가지고있다. 스레드에서 FileScanner의 메서드 (디렉터리 검사)를 호출하고 Textview (예 : R.id.thisfile)에 파일 이름을 표시하려고합니다. 어떻게해야합니까? –

+0

편집을 참조하십시오 ... –

관련 문제