アプリ版:「スタンプのみでお礼する」機能のリリースについて

指定したディレクトリ以下のディレクトリの階層構造を、ツリー表示するプログラムを作りたいと思っています。
階層構造は、階層が下がるごとにインデントをつけてツリー表示したいと思っています。
指定ディレクトリ以下のディレクトリ名をすべて表示させるところまではできたのですが、インデントをうまくつけられずに困っています。
ソースは以下のようにしました。

----------------------------------

import java.io.File;

public class DirTree {
String dirName;
void showDirName(){

File directory = new File(dirName);
File[] subFiles = directory.listFiles();

for (int i = 0; i < subFiles.length; i++)
{
if(subFiles[i].isDirectory()==true)
{
System.out.println(subFiles[ i ].getName() );
dirName = subFiles[ i ].getPath();
showDirName();
}
}
}
}

---------------------------------------------

何かよい方法や、ここをこうしたらと言うのがありましたら教えていただけませんでしょうか。
よろしくお願いいたします。

A 回答 (1件)

 こんばんは。



>インデントをうまくつけられずに困っています。

 インデントはメソッドの引数で指定するように作って、メソッドを呼ぶときに現在の階層に一つ足した数を渡してやればいいのではないでしょうか。
 メソッド内でインデントの数だけ空白なりタブなりを追加してやればいいと思います。

(コンパイルするときは全角スペースを半角スペースに変換してからにしてください)

import java.io.*;

public class DirTree {
  public static void main(String[] args) {
    showDirName(new File("C:\\hoge\\hoge"), 0);
  }
  
  static void showDirName(File dir, int indent) {
    if (dir.isDirectory()) {
      StringBuffer sb = new StringBuffer();
      //インデントの深さの分までタブを入れる
      for(int i = 0; i < indent; i++) {
        sb.append("\t");
      }
      sb.append(dir.getName());
      System.out.println(sb.toString());
      
      File[] dirList = dir.listFiles();
      for (int i = 0; i < dirList.length; i++) {
        //現在のインデントに1足して再帰的にメソッドを呼ぶ
        showDirName(dirList[i], indent + 1);
      }
    }
  }
}
    • good
    • 0
この回答へのお礼

解決しました、ありがとうございました!
for文でまわして、StringBufferを使えばよかったのですね…大変参考になりました。
ご丁寧にソースまでつけてくださって本当にどうもありがとうございました!

お礼日時:2005/05/12 22:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!