2012-02-17 11 views
0

私のFTPアカウントのすべてのフォルダとサブフォルダを再帰的にリストしようとしています。 関数ftpPrintDirsListは、フォルダ内のフォルダの配列リストを返します。 私は、このフォルダを使用している場合: /B/C/B/D/E/F/G /、/ F/G/H、/ F/G /私はAndroidリストすべてのftpフォルダとサブフォルダ

私が必要a/b、a/b/c、a/b/d、a/b/d/e、a/f、a/f/g、a/f/gのような配列リストを得る/ H、/ F/G/I (順番はそのようにする必要はありませんが、私はすべてのフォルダを参照する必要があります)

は、これまでのところ、私はここに捕まってしまった:

ArrayList<String> fassD = ftpPrintDirsList("/FlashAssets"); 
    ArrayList<String> inner = null; 

    for (int i = 0; i < fassD.size(); i++) //for each subfolder in FlashAssets 
    { 
     inner = ftpPrintDirsList("/FlashAssets/"+fassD.get(i)); //list all subfolders 

      for (int j = 0; j < inner.size(); j++) 
      { 
      inner.set(j, fassD.get(i)+"/"+inner.get(j)); 
      fassD.addAll(inner); 
      } 

    } 
    Log.d(TAG, "Final: "+fassD); 

しかし、私は無限ループを手に入れてくれます。 ありがとうございます。

+0

あなたは再帰を使用していると言いますが、このコードはftpPrintDirsListメソッド内にありますか? – Thomas

+0

実際には、これはコード全体です。再帰によって、私はfassDにすべてのフォルダを追加した後、ループは新しいフォルダ – DanM

+0

で再度実行されますが、inner.size時間内側にfassD – kingston

答えて

1

ここでは、ftpPrintDirsListが記述していることを前提として、再帰的な方法があります。各フォルダーごとに、それ自身をリストに追加し、すべてのサブフォルダーのメソッドを呼び出します。サブフォルダがない場合は、リストに自身を追加してからリターンします。これは、あなたのファイルの深さの最初の順序を与えるでしょう。/a/b/cはa/cの前に来る

public ArrayList<String> getFolders(String foldername) 
{ 
    ArrayList<String> retval = new ArrayList<String>(); 
    retval.add(foldername); 
    ArrayList<String> subfolders = ftpPrintDirsList(foldername); 
    for (String folder : subfolders) 
    retval.addall(getFolders(foldername + folder)); 
    return retval; 
} 
+0

ありがとう!それはうまくいきました。foldername + "/" + folder。 – DanM

関連する問題