回答

13

您幾乎總是隻能從非UI線程訪問文件系統。否則,您可能會長時間阻塞UI線程並獲取ANR。在AsyncTaskdoInBackground()中運行FileWalker。

這是FileWalker的一個稍微優化版本:

public class Filewalker { 

    public void walk(File root) { 

     File[] list = root.listFiles(); 

     for (File f : list) { 
      if (f.isDirectory()) { 
       Log.d("", "Dir: " + f.getAbsoluteFile()); 
       walk(f); 
      } 
      else { 
       Log.d("", "File: " + f.getAbsoluteFile()); 
      } 
     } 
    } 
} 

您可以從後臺線程調用它是這樣的:

Filewalker fw = new Filewalker(); 
fw.walk(context.getFilesDir()); 
+0

謝謝!我會試試看! – INCOGNITO 2012-07-14 09:04:39

+0

原諒我的天真的問題,但在這裏如何分配上下文?我通常將它作爲參數傳遞給一個函數,但我在這裏看不到任何參數?沒有,上下文給我一個'無法解決'編譯錯誤。 – biscuitstack 2016-07-11 11:19:14

+1

@biscuitstack你可以使用'Activity'或'Application'的實例作爲['Context'](https://developer.android.com/reference/android/content/Context.html)。 – 2016-07-11 13:18:40

0

System.out.println調用真的很慢(嗯,它不是真正的函數本身,而是底層PrintStream,它需要花費大量時間在控制檯中編寫文本)。

用別的東西代替它們,它應該沒問題。例如,您可以創建並返回包含文件名的數組。