[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
No Subject
// show file tree by HTML Table
// TreeTable.java
// copyright(c) 1999 ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
// 参考図書: 青柳達也『Java APIプログラミングガイド』p.106〜107
// 1996 工学図書 ISBN4-7692-0372-1
import java.io.*;
import java.util.*;
public class TreeTable {
private static final String LEAF = "<TD>├─</TD>"; // 途中の子供
private static final String BOTTOM = "<TD>└─</TD>"; // 最後の子供
private static final String SUBTREE = "<TD>│ </TD>"; // 途中の子供の下位ノード
private static final String BLANK = "<TD> </TD>"; // 最後の子供の下位ノード
static int depth = 0; // 全体の深さ
private Vector tree = new Vector(); // 1 ノードにつき 3 要素をaddする
// 0: String 接頭辞 "<TR><TD>...</TD>"
// 1: String ファイルまたはディレクトリー名
// 2: Integer そのノードの深さ
//ディレクトリーの再帰探索
public void retrieve(File dir, String pref, int node_depth) {
class DirectoryFilter implements FileFilter {
public boolean accept(File file) { return file.isDirectory(); }
}
class FileOnlyFilter implements FileFilter {
public boolean accept(File file) { return file.isFile(); }
}
if (node_depth > this.depth) this.depth = node_depth;
File[] subdirs = dir.listFiles(new DirectoryFilter());
File[] files = dir.listFiles(new FileOnlyFilter());
String fbefore = null;
if (subdirs.length > 0) fbefore = pref + SUBTREE;
else fbefore = pref + BLANK;
for (int i=0; i<files.length; i++) {
tree.addElement(fbefore); // "<TR><TD>...</TD>"
tree.addElement(files[i].getName()); // ファイル名
tree.addElement(new Integer(node_depth)); // 深さ
}
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;
}
tree.addElement(before); // "<TR><TD>...</TD>"
tree.addElement(subdirs[i].getName()); // ディレクトリー名
tree.addElement(new Integer(node_depth)); // 深さ
retrieve(subdirs[i], pref + next, node_depth + 1);
}
}
public void retrieve(String dir) {
retrieve(new File(dir), "<TR>", 1);
}
//ディレクトリー/ファイルをHTML Tableで表示
public void showTree() {
System.out.println("<TABLE borde=\"0\">");
Enumeration e = tree.elements();
while (e.hasMoreElements()) {
String pref = (String)e.nextElement(); // "<TR><TD>...</TD>"
String name = (String)e.nextElement(); // ファイル/ディレクトリー名
int node_depth = ((Integer)e.nextElement()).intValue(); // 深さ
int colspan = depth - node_depth + 1; // セルの幅
System.out.println(pref + "<TD colspan=\"" + colspan + "\">" + name + "</TD></TR>");
}
System.out.println("</TABLE>");
}
public static void main(String[] args) {
TreeTable ttable = new TreeTable();
ttable.tree.addElement("<TR>"); // "<TR>
ttable.tree.addElement(args[0]); // 最上位のディレクトリー名
ttable.tree.addElement(new Integer(0)); // 深さ0
ttable.retrieve(args[0]);
ttable.showTree();
}
}
--
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)