import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.io.File;
import java.util.Arrays;
import java.util.Vector;
class jtree
{
public static void main(String args[])
{
new FileView();
}
}
class FileView extends JFrame
{
// ホームディレクトリの取得
final String home_directory = System.getProperty("user.home");
public FileView()
{
setTitle("TreeTest");
setSize(255,255);
// ウインドウリスナの登録
WindowListener listener = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
addWindowListener(listener);
// ツリーの生成と配置
DirectoryNode top = new DirectoryNode(home_directory);
JTree tree = new JTree(top);
JScrollPane treeview = new JScrollPane(tree);
getContentPane().add(treeview,BorderLayout.CENTER);
setVisible(true);
}
}
class DirectoryNode extends DefaultMutableTreeNode
{
// ファイルセパレータの取得
final String separator = System.getProperty("file.separator");
public DirectoryNode(String root_path)
{
super(root_path);
ProcessFileList(this);
}
// ファイルリストの処理
protected void ProcessFileList(DefaultMutableTreeNode parent_node)
{
File directory = new File(parent_node.toString());
String file_list[] = directory.list();
file_list = SortFileList(parent_node.toString(),file_list);
// 子ノードの追加
for(int i=0;i<file_list.length;i++)
{
File file = new File(parent_node.toString() + separator + file_list[i]);
DefaultMutableTreeNode child_node = new DefaultMutableTreeNode(file.getAbsolutePath());
parent_node.add(child_node);
if(file.isDirectory())
{
// ディレクトリの場合のみ再帰呼び出し
ProcessFileList(child_node);
}
}
}
// ファイルリストのソート
protected String[] SortFileList(String path,String list[])
{
Vector directory_list,file_list;
directory_list = new Vector();
file_list = new Vector();
// ファイルとディレクトリの分別
for(int i=0;i<list.length;i++)
{
File file = new File(path + separator + list[i]);
if(file.isFile())
{
file_list.addElement(new String(list[i]));
}
else if(file.isDirectory())
{
directory_list.addElement(new String(list[i]));
}
}
// Vector配列→String配列への変換&ソート
String file_name_list[] = new String[file_list.size()];
file_list.copyInto(file_name_list);
Arrays.sort(file_name_list);
String directory_name_list[] = new String[directory_list.size()];
directory_list.copyInto(directory_name_list);
Arrays.sort(directory_name_list);
// ソート済み配列をコピーする(マージ)
String return_list[] = new String[list.length];
for(int i=0;i<directory_name_list.length;i++)
{
return_list[i] = directory_name_list[i];
}
int offset = directory_name_list.length;
for(int i=0;i<file_name_list.length;i++)
{
return_list[i+offset] = file_name_list[i];
}
return(return_list);
}
}
Source is here. (ZIP Format,1301Byte,Shift-JIS)