⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filetree2.java

📁 局域网传输共享文件
💻 JAVA
字号:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.Vector;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreeSelectionModel;

public class FileTree2 extends JFrame

{
	protected JTree m_tree;

	protected DefaultTreeModel m_model;

	protected JTextField m_display;

	public FileTree2() {
		super("Directories Tree");
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception err) {
		}
		setSize(400, 300);
		File[] roots = FileSystemView.getFileSystemView().getRoots();// File.listRoots();
		FileRow root = new FileRow(roots);
		m_model = new DefaultTreeModel(root);

		m_tree = new JTree(m_model);
		m_tree.getSelectionModel().setSelectionMode(
				TreeSelectionModel.SINGLE_TREE_SELECTION);
		m_tree.putClientProperty("JTree.lineStyle", "Angled");

		m_tree.setCellRenderer(new FileTreeRenderer1());
		// m_tree.addTreeExpansionListener(new DirExpansionListener());
		// m_tree.addTreeSelectionListener(new DirSelectionListener());
		m_tree.setShowsRootHandles(true);
		m_tree.setEditable(false);
		m_tree.setDragEnabled(true);
		JScrollPane s = new JScrollPane();
		s.getViewport().add(m_tree);
		getContentPane().add(s, BorderLayout.CENTER);
		m_display = new JTextField();
		m_display.setEditable(false);
		System.out.println();
		TreeSelectionListener tEar = new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				FileRow fr = (FileRow) e.getNewLeadSelectionPath()
						.getLastPathComponent();
				File[] contents = fr.getFile().listFiles();
				// mFileView.setListData(contents);
				for (int i = 0; i < contents.length; i++)
					System.out.println(contents[i]);

				// m_model.add(node);
				// m_tree.add(node);
			}
		};

		m_tree.addTreeSelectionListener(tEar);

		getContentPane().add(m_display, BorderLayout.NORTH);
		WindowListener wndCloser = new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		};
		addWindowListener(wndCloser);
		setVisible(true);
	}

	public static void main(String argv[]) {
		new FileTree2();
	}

	public static boolean isDirectory(File fl) {
		FileSystemView fsv = FileSystemView.getFileSystemView();
		if (fl.isDirectory() || fl.isFile())
			return fsv.isTraversable(fl).booleanValue();
		return fsv.isComputerNode(fl) || fsv.isDrive(fl)
				|| fsv.isFileSystemRoot(fl);
	}

	private class FileRow implements FileFilter, Comparator, TreeNode {
		private File mDir;

		private String mName;

		private FileRow[] mChildren;

		private FileRow mParent;

		FileRow(File fl, FileRow parent) {
			mDir = fl;
			mName = fl.getName();
			mParent = parent;
			if (mName.length() == 0) // file roots have no name
				mName = mDir.toString();
		}

		FileRow(File[] roots) {
			mName = "Root";
			mChildren = new FileRow[roots.length];
			makeChildren(roots);
		}

		public int getChildCount() {
			if (mChildren == null)
				makeChildrenFromDir();
			return mChildren.length;
		}

		public TreeNode getChildAt(int index) {
			if (mChildren == null)
				makeChildrenFromDir();
			return mChildren[index];
		}

		public File getFile() {
			return mDir;
		}

		/*
		 * Workaround to bug 4701462
		 */
		public File[] filterFiles(File mDir, FileFilter fltr) {
			File[] children = mDir.listFiles();
			ArrayList<File> passed = new ArrayList<File>();
			for (int ii = 0; ii < children.length; ii++)
				if (fltr.accept(children[ii]))
					passed.add(children[ii]);
			return (File[]) passed.toArray(new File[0]);
		}

		public void makeChildrenFromDir() {
			// We don't call listFiles(FileFilter), due to bug 4701462
			// File[] kids = mDir.listFiles(this);
			File[] kids = filterFiles(mDir, this);
			if (kids != null) {
				Arrays.sort(kids, this);
				mChildren = new FileRow[kids.length];
				makeChildren(kids);
			} else
				// this happens sometimes, like when the volume doesn't exist
				// (a:)
				mChildren = new FileRow[0];
		}

		public void makeChildren(File[] kids) {
			for (int ii = 0; ii < kids.length; ++ii)
				mChildren[ii] = new FileRow(kids[ii], this);
		}

		public boolean accept(File fl) {
			return isDirectory(fl);
		}

		public int compare(Object o1, Object o2) {
			return ((File) o1).compareTo((File) o2);
		}

		public String toString() {
			return mName;
		}

		public TreeNode getParent() {
			return mParent;
		}

		public int getIndex(TreeNode node) {
			for (int ii = 0; ii < mChildren.length; ++ii)
				if (mChildren[ii] == node)
					return ii;
			return -1;
		}

		public boolean getAllowsChildren() {
			return true;
		}

		public boolean isLeaf() {
			return false;
		}

		public Enumeration children() {
			Enumeration enum1 = new Enumeration() {
				int ii = 0;

				public boolean hasMoreElements() {
					return ii < mChildren.length;
				}

				public Object nextElement() {
					return mChildren[ii++];
				}
			};
			return enum1;
		}
	}

	private class FileTreeRenderer1 extends DefaultTreeCellRenderer {
		/**
		 * 
		 */
		private static final long serialVersionUID = 256008059685651679L;

		public Component getTreeCellRendererComponent(JTree tree, Object value,
				boolean sel, boolean expanded, boolean leaf, int row,
				boolean hasFocus) {
			File fl = ((FileRow) value).getFile();
			String name = FileSystemView.getFileSystemView()
					.getSystemDisplayName(fl);
			Component cmp = super.getTreeCellRendererComponent(tree, name, sel,
					expanded, leaf, row, hasFocus);
			JLabel jc = (JLabel) cmp;
			Icon fileIcon = FileSystemView.getFileSystemView()
					.getSystemIcon(fl);
			jc.setIcon(fileIcon);
			return jc;
		}
	}

}

class FileNode {
	protected File m_file;

	public FileNode(File file) {
		m_file = file;
	}

	public File getFile() {
		return m_file;
	}

	public String toString() {
		return m_file.getName().length() > 0 ? m_file.getName() : m_file
				.getPath();
	}

	public boolean expand(DefaultMutableTreeNode parent) {
		DefaultMutableTreeNode flag = (DefaultMutableTreeNode) parent
				.getFirstChild();
		if (flag == null) // No flag
			return false;
		Object obj = flag.getUserObject();
		if (!(obj instanceof Boolean))
			return false; // Already expanded
		parent.removeAllChildren(); // Remove Flag
		File[] files = listFiles();
		if (files == null)
			return true;
		Vector<FileNode> v = new Vector<FileNode>();
		for (int k = 0; k < files.length; k++) {
			File f = files[k];
			if ((f.isDirectory()))
				continue;
			FileNode newNode = new FileNode(f);
			boolean isAdded = false;
			for (int i = 0; i < v.size(); i++) {
				FileNode nd = (FileNode) v.elementAt(i);
				if (newNode.compareTo(nd) < 0) {
					v.insertElementAt(newNode, i);
					isAdded = true;
					break;
				}
			}
			if (!isAdded)
				v.addElement(newNode);
		}
		for (int i = 0; i < v.size(); i++) {
			FileNode nd = (FileNode) v.elementAt(i);
			// IconData idata = new IconData(FileTree1.ICON_FOLDER,
			// FileTree1.ICON_EXPANDEDFOLDER, nd);
			// DefaultMutableTreeNode node = new
			// DefaultMutableTreeNode();//idata);
			// parent.add(node);
			// if (nd.hasSubDirs())
			// node.add(new DefaultMutableTreeNode( new Boolean(true) ));
		}
		return true;
	}

	public boolean hasSubDirs() {
		File[] files = listFiles();
		if (files == null)
			return false;
		for (int k = 0; k < files.length; k++) {
			if (files[k].isDirectory())
				return true;
		}
		return false;
	}

	public int compareTo(FileNode toCompare) {
		return m_file.getName().compareToIgnoreCase(toCompare.m_file.getName());
	}

	protected File[] listFiles() {
		if (!m_file.isDirectory())
			return null;
		try {
			return m_file.listFiles();
		} catch (Exception ex) {
			JOptionPane.showMessageDialog(null, "Error reading directory "
					+ m_file.getAbsolutePath(), "Warning",
					JOptionPane.WARNING_MESSAGE);
			return null;

		}

	}

}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -