[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] PathTree.java
必要があって、ディレクトリー・ツリーを表示する Java コードを書きました。
以前 DOS 用に C で書いたものがあったのですが、
こちらはファイル名が 8+3 文字対応でした。
C のソースが見当たらなくて、今回 Java で新しく書き直しました。
C のソースの半分以下の行数で書けたので感動しています。
つまらないものですが投稿します。
青柳龍也さんの名著『Java APIプログラミングガイド』p.106〜107 を参考に
しました。
この本は JDK 1.0 なので java.io.FilenameFilter と java.io.File#list()を使っているのですが、
JDK 1.2 の練習を兼ねて java.io.FileFilter と java.io.File#listFiles() を使ってみました。
使い方は
java PathTree <ディレクトリー名>
でそのディレクトリー配下のサブディレクトリーをツリー表示します。
PathTree.java
=====================================
// show directory tree
// PathTree.java
// copyright(c) 1999 ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
// 参考図書: 青柳達也『Java APIプログラミングガイド』p.107
// 1996 工学図書 ISBN4-7692-0372-1
import java.io.*;
import java.util.*;
public class PathTree {
private static final String LEAF = "|---";//途中の子供
private static final String BOTTOM = "+---";//最後の子供
private static final String SUBTREE = "| ";//途中の子供の下位ノード
private static final String BLANK = " ";//最後の子供の下位ノード
public void retrieve(File dir, String pref) {
class DirectoryFilter implements FileFilter {
public boolean accept(File file) { return file.isDirectory(); }
}
DirectoryFilter dirfilter = new DirectoryFilter();
File[] subdirs = dir.listFiles(dirfilter);
for (int i=0; i<subdirs.length; i++) {
String before = null;
String next = null;
if (i == subdirs.length - 1) {
before = pref + BOTTOM;
next = BLANK;
} else {
before = pref + LEAF;
next = SUBTREE;
}
System.out.println(before + subdirs[i].getName());//TEST
retrieve(subdirs[i], pref + next);
}
}
public void retrieve(String dir) {
retrieve(new File(dir), " ");
}
public static void main(String[] args) {
PathTree ptree = new PathTree();
System.out.println(args[0]);
ptree.retrieve(args[0]);
}
}
=====================================
今回はディレクトリー名しか表示してませんが、
こんなFileFilterを書けば DOS の tree.exe の -f オプションのように
ファイルも一緒にツリー表示できると思います。
class FileOnlyFilter implements FileFilter {
public boolean accept(File file) { return file.isFile(); }
}
--
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)