http://d.hatena.ne.jp/bleis-tift/20090616/1245134308
おいらは両方ってやつしかすぐに思い浮かばなかった。簡単なのがいいよね。頭悪いおいらでも思いつくってことは世の中のプログラマみんなすぐわかるってことだし。
でも、addAll使っていたのに衝撃を受ける。Listをローカルに入れるというのが思いつかなかった。ああ、Javaならそれでいいのか…と。
こういうのはC言語くらいでしか書いたことがなかったのでそういう発想がぜんぜんなかった。Cだとヒープ管理するのたるいし、スタックに配列入れるの危険すぎるしとか。
だからおいらの場合Javaでもシンプルな原始的な書き方しかたぶんやらない。こんな感じ。
public class Files { public static void main(String[] args) { File root = new File("C:\\お好きなディレクトリ"); Files files = new Files(); files.append(root,0); //結果出力 for(String file : files.fileList){ System.out.println(file); } } private List<String> fileList = new ArrayList<String>(); private void append(File dir, int level){ File[] files = dir.listFiles(); for(File f : files){ if(f.isDirectory()){ fileList.add(levelFormat("["+f.getName()+"]",level)); append(f , level+1); }else{ fileList.add(levelFormat("└"+f.getName(),level)); } } } //ただの字下げ private String levelFormat(String text,int level){ StringBuilder sb = new StringBuilder(); for(int i=0;i<level;i++){ sb.append(" "); } return sb.append(text).toString(); } }
つまんないコードですみません。でも試験に出そうな問題かな。