如何判断 打开 树结构叶节点 的文件, 并显示其内容, 求部分代码, 已实现数据结构的遍历我也在工作中碰到了同样的问题, 我用Java来实现资源管理器
一个JFrame由左右两个Panel组成
左边是棵树, 遍历显示了系统中所有目录
当选中叶节点是 .txt .xml 就将其内容显示在右边的TextArea上.如何判断文件类型, 如何打开文件并显示.这是个 JTree文件查看器 查看指定盘下的目录结构.
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.EventObject;public class Test extends JFrame {
public Test() {
final JTree tree = new JTree(createTreeModel());
JScrollPane scrollPane = new JScrollPane(tree);getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(GJApp.getStatusArea(),
BorderLayout.SOUTH);tree.addTreeExpansionListener(new TreeExpansionListener(){
public void treeCollapsed(TreeExpansionEvent e) {
}
public void treeExpanded(TreeExpansionEvent e) {
UpdateStatus updateThread;
TreePath path = e.getPath();
FileNode node = (FileNode)
path.getLastPathComponent();if( ! node.isExplored()) {
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
GJApp.updateStatus("exploring ...");UpdateStatus us = new UpdateStatus();
us.start();node.explore();
model.nodeStructureChanged(node);
}
}
class UpdateStatus extends Thread {
public void run() {
try { Thread.currentThread().sleep(450); }
catch(InterruptedException e) { }SwingUtilities.invokeLater(new Runnable() {
public void run() {
GJApp.updateStatus(" ");
}
});
}
}
});
}private DefaultTreeModel createTreeModel() {
File root = new File("E:/"); // 应该只要改这句就成
FileNode rootNode = new FileNode(root);rootNode.explore();
return new DefaultTreeModel(rootNode);
}
public static void main(String args[]) {
GJApp.launch(new Test(),"JTree File Explorer",
300,300,450,400);
}
}
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false;public FileNode(File file) {
setUserObject(file);
}
public boolean getAllowsChildren() { return isDirectory(); }
public boolean isLeaf() { return !isDirectory(); }
public File getFile(){ return (File)getUserObject(); }public boolean isExplored() { return explored; }public boolean isDirectory() {
File file = getFile();
return file.isDirectory();
}
public String toString() {
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator);return (index != -1 && index != filename.length()-1) ?
filename.substring(index+1) :
filename;
}
public void explore() {
if(!isDirectory())
return;if(!isExplored()) {
File file = getFile();
File[] children = file.listFiles();for(int i=0; i < children.length; ++i)
add(new FileNode(children[i]));explored = true;
}
}
}
class GJApp extends WindowAdapter {
static private JPanel statusArea = new JPanel();
static private JLabel status = new JLabel(" ");public static void launch(final JFrame f, String title,
final int x, final int y,
final int w, int h) {
f.setTitle(title);
f.setBounds(x,y,w,h);
f.setVisible(true);statusArea.setBorder(BorderFactory.createEtchedBorder());
statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
statusArea.add(status);
status.setHorizontalAlignment(JLabel.LEFT);f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
static public JPanel getStatusArea() {
return statusArea;
}
static public void updateStatus(String s) {
status.setText(s);
}
}
一个JFrame由左右两个Panel组成
左边是棵树, 遍历显示了系统中所有目录
当选中叶节点是 .txt .xml 就将其内容显示在右边的TextArea上.如何判断文件类型, 如何打开文件并显示.这是个 JTree文件查看器 查看指定盘下的目录结构.
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.EventObject;public class Test extends JFrame {
public Test() {
final JTree tree = new JTree(createTreeModel());
JScrollPane scrollPane = new JScrollPane(tree);getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(GJApp.getStatusArea(),
BorderLayout.SOUTH);tree.addTreeExpansionListener(new TreeExpansionListener(){
public void treeCollapsed(TreeExpansionEvent e) {
}
public void treeExpanded(TreeExpansionEvent e) {
UpdateStatus updateThread;
TreePath path = e.getPath();
FileNode node = (FileNode)
path.getLastPathComponent();if( ! node.isExplored()) {
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
GJApp.updateStatus("exploring ...");UpdateStatus us = new UpdateStatus();
us.start();node.explore();
model.nodeStructureChanged(node);
}
}
class UpdateStatus extends Thread {
public void run() {
try { Thread.currentThread().sleep(450); }
catch(InterruptedException e) { }SwingUtilities.invokeLater(new Runnable() {
public void run() {
GJApp.updateStatus(" ");
}
});
}
}
});
}private DefaultTreeModel createTreeModel() {
File root = new File("E:/"); // 应该只要改这句就成
FileNode rootNode = new FileNode(root);rootNode.explore();
return new DefaultTreeModel(rootNode);
}
public static void main(String args[]) {
GJApp.launch(new Test(),"JTree File Explorer",
300,300,450,400);
}
}
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false;public FileNode(File file) {
setUserObject(file);
}
public boolean getAllowsChildren() { return isDirectory(); }
public boolean isLeaf() { return !isDirectory(); }
public File getFile(){ return (File)getUserObject(); }public boolean isExplored() { return explored; }public boolean isDirectory() {
File file = getFile();
return file.isDirectory();
}
public String toString() {
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator);return (index != -1 && index != filename.length()-1) ?
filename.substring(index+1) :
filename;
}
public void explore() {
if(!isDirectory())
return;if(!isExplored()) {
File file = getFile();
File[] children = file.listFiles();for(int i=0; i < children.length; ++i)
add(new FileNode(children[i]));explored = true;
}
}
}
class GJApp extends WindowAdapter {
static private JPanel statusArea = new JPanel();
static private JLabel status = new JLabel(" ");public static void launch(final JFrame f, String title,
final int x, final int y,
final int w, int h) {
f.setTitle(title);
f.setBounds(x,y,w,h);
f.setVisible(true);statusArea.setBorder(BorderFactory.createEtchedBorder());
statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
statusArea.add(status);
status.setHorizontalAlignment(JLabel.LEFT);f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
static public JPanel getStatusArea() {
return statusArea;
}
static public void updateStatus(String s) {
status.setText(s);
}
}
Listing the Files or Subdirectories in a Directory
This example lists the files and subdirectories in a directory.
File dir = new File("directoryName");
String[] children = dir.list();
if (children == null) {
// Either dir does not exist or is not a directory
} else {
for (int i=0; i<children.length; i++) {
// Get filename of file or directory
String filename = children[i];
}
}
// It is also possible to filter the list of returned files.
// This example return all files that end with `.xml'.
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".xml");
}
};
children = dir.list(filter);
// The list of files can also be retrieved as File objects
File[] files = dir.listFiles();
// This filter only returns directories
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};
files = dir.listFiles(fileFilter);
判断文件的后缀和文件名,用filenameFilter,例子前面都给了
import java.util.EventObject;public class aa
{
public static void main(String[] args)
{
System.out.println("列出一个目录下所有的文件和子目录");
File dir = new File("E:/"); // 目录名
String[] children = dir.list(); // 返回当前 File 对象指定的路径文件列表
if (children == null) {
// Either dir does not exist or is not a directory
}
else {
for (int i=0; i<children.length; i++) {
// Get filename of file or directory
String filename = children[i];
System.out.println(filename);
}
}
// 返回指定目录下所有的扩展名为 .txt .xml 的文件
System.out.println("返回指定目录下所有的扩展名为 .txt .xml 的文件");
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
boolean e = name.endsWith(".xml");
if(e)
System.out.println(name);
else
{
e = name.endsWith(".rar");
if(e)
System.out.println(name);
}
return e;
/* if( name.endsWith(".xml") )
{ return true; }
else
{ return( name.endsWith(".txt") ); }
*/ }
};
children = dir.list(filter);
System.out.println("只返回目录名, 为什么这里有错");
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
if(file.isDirectory())
System.out.prinln(file.toString() );
return file.isDirectory(); // 测试当前 File 对象表示的文件是否是一条路径
}
};
File[] files = dir.listFiles(fileFilter); }
}