用java I/O File类中的boolean mkdir();函数,它可以根据当前对象生成一个由该对象指定的路径。

解决方案 »

  1.   

    我想搜索当前计算机的所有目录生成JTree,该怎样做才好,有没有例子可以参考。
    不要告诉我先搜索全部路径再创建JTree,那样我会疯的。我的C盘有753854个目录和文件。
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.util.*;
    import com.borland.jbcl.layout.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;public class ChooseDir extends JDialog
    {
    public static final ImageIcon ICON_COMPUTER =
    new ImageIcon(FrameMain.class.getResource("images/paste.gif"));
    public static final ImageIcon ICON_DISK =
    new ImageIcon(FrameMain.class.getResource("images/new.gif"));
    public static final ImageIcon ICON_FOLDER =
    new ImageIcon(FrameMain.class.getResource("images/folder.gif"));
    public static final ImageIcon ICON_EXPANDEDFOLDER =
    new ImageIcon(FrameMain.class.getResource("images/expandedfolder.gif"));
            JButton jButtonOK = new JButton("OK");
            JButton jButtonCancel = new JButton("Cancel");
    protected JTree  m_tree;
    protected DefaultTreeModel m_model;
    protected JTextField m_display;
            JTextField m_textPath; public ChooseDir(JTextField jTextpath)
    {
    //super("Directories Tree");
                    this.setModal(true);
    setSize(400, 300);
                    m_textPath = jTextpath; DefaultMutableTreeNode top = new DefaultMutableTreeNode(
    new IconData(ICON_COMPUTER, null, "Computer"));
                    jButtonOK.addActionListener(new java.awt.event.ActionListener() {
                      public void actionPerformed(ActionEvent e) {
                      jButtonOK_actionPerformed(e);
                      }
                    });
                    jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
                      public void actionPerformed(ActionEvent e) {
                      jButtonCancel_actionPerformed(e);
                      }
                    });
    DefaultMutableTreeNode node;
    File[] roots = File.listRoots();
    for (int k=0; k < roots.length; k++)
    {
    node = new DefaultMutableTreeNode(new IconData(ICON_DISK,
    null, new FileNode(roots[k])));
    top.add(node);
                            node.add( new DefaultMutableTreeNode(new Boolean(true)));
    } m_model = new DefaultTreeModel(top);
    m_tree = new JTree(m_model);                m_tree.putClientProperty("JTree.lineStyle", "Angled"); TreeCellRenderer renderer = new IconCellRenderer();
    m_tree.setCellRenderer(renderer); m_tree.addTreeExpansionListener(new DirExpansionListener()); m_tree.addTreeSelectionListener(new DirSelectionListener()); m_tree.getSelectionModel().setSelectionMode(
    TreeSelectionModel.SINGLE_TREE_SELECTION);
    m_tree.setShowsRootHandles(true);
    m_tree.setEditable(false); JScrollPane s = new JScrollPane();
    s.getViewport().add(m_tree);
    getContentPane().add(s, BorderLayout.CENTER); m_display = new JTextField();
    m_display.setEditable(false);
    getContentPane().add(m_display, BorderLayout.NORTH);
                    JPanel p1 = new JPanel();
                    p1.setLayout(new BorderLayout());
                    p1.add(jButtonOK,BorderLayout.WEST);
                    p1.add(jButtonCancel,BorderLayout.EAST);
                    getContentPane().add(p1,BorderLayout.SOUTH); }
            void jButtonOK_actionPerformed(ActionEvent e){
              setVisible(false);
            }
            void jButtonCancel_actionPerformed(ActionEvent e) {
              m_textPath.setText("");
              setVisible(false);
            }
    DefaultMutableTreeNode getTreeNode(TreePath path)
    {
    return (DefaultMutableTreeNode)(path.getLastPathComponent());
    } FileNode getFileNode(DefaultMutableTreeNode node)
    {
    if (node == null)
    return null;
    Object obj = node.getUserObject();
    if (obj instanceof IconData)
      obj = ((IconData)obj).getObject();
    if (obj instanceof FileNode)
      return (FileNode)obj;
    else
      return null;
    }    // Make sure expansion is threaded and updating the tree model
        // only occurs within the event dispatching thread.
        class DirExpansionListener implements TreeExpansionListener
        {
            public void treeExpanded(TreeExpansionEvent event)
            {
                final DefaultMutableTreeNode node = getTreeNode(
                    event.getPath());
                final FileNode fnode = getFileNode(node);            Thread runner = new Thread()
                {
                  public void run()
                  {
                    if (fnode != null && fnode.expand(node))
                    {
                      Runnable runnable = new Runnable()
                      {
                        public void run()
                        {
                           m_model.reload(node);
                        }
                      };
                      SwingUtilities.invokeLater(runnable);
                    }
                  }
                };
                runner.start();
            }        public void treeCollapsed(TreeExpansionEvent event) {}
        }
    class DirSelectionListener implements TreeSelectionListener
    {
    public void valueChanged(TreeSelectionEvent event)
    {
    DefaultMutableTreeNode node = getTreeNode(
    event.getPath());
    FileNode fnode = getFileNode(node);
    if (fnode != null){
    m_display.setText(fnode.getFile().getPath());
                                    m_textPath.setText(fnode.getFile().getPath());
                                    }
    else
    m_display.setText("");
    }
    }
    }class IconCellRenderer  extends    JLabel implements TreeCellRenderer
    {
    protected Color m_textSelectionColor;
    protected Color m_textNonSelectionColor;
    protected Color m_bkSelectionColor;
    protected Color m_bkNonSelectionColor;
    protected Color m_borderSelectionColor; protected boolean m_selected; public IconCellRenderer()
    {
    super();
    m_textSelectionColor = UIManager.getColor(
    "Tree.selectionForeground");
    m_textNonSelectionColor = UIManager.getColor(
    "Tree.textForeground");
    m_bkSelectionColor = UIManager.getColor(
    "Tree.selectionBackground");
    m_bkNonSelectionColor = UIManager.getColor(
    "Tree.textBackground");
    m_borderSelectionColor = UIManager.getColor(
    "Tree.selectionBorderColor");
    setOpaque(false);
    } public Component getTreeCellRendererComponent(JTree tree,
    Object value, boolean sel, boolean expanded, boolean leaf,
    int row, boolean hasFocus) {
    DefaultMutableTreeNode node =
    (DefaultMutableTreeNode)value;
    Object obj = node.getUserObject();
    setText(obj.toString());                if (obj instanceof Boolean)
                      setText("Retrieving data..."); if (obj instanceof IconData)
    {
    IconData idata = (IconData)obj;
    if (expanded)
      setIcon(idata.getExpandedIcon());
    else
      setIcon(idata.getIcon());
    }
    else
    setIcon(null); setFont(tree.getFont());
    setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
    setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
    m_selected = sel;
    return this;
    } public void paintComponent(Graphics g)
    {
    Color bColor = getBackground();
    Icon icon = getIcon(); g.setColor(bColor);
    int offset = 0;
    if(icon != null && getText() != null)
    offset = (icon.getIconWidth() + getIconTextGap());
    g.fillRect(offset, 0, getWidth() - 1 - offset,
    getHeight() - 1); if (m_selected)
    {
    g.setColor(m_borderSelectionColor);
    g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
    }
    super.paintComponent(g);
        }
    }class IconData
    {
    protected Icon   m_icon;
    protected Icon   m_expandedIcon;
    protected Object m_data; public IconData(Icon icon, Object data)
    {
    m_icon = icon;
    m_expandedIcon = null;
    m_data = data;
    } public IconData(Icon icon, Icon expandedIcon, Object data)
    {
    m_icon = icon;
    m_expandedIcon = expandedIcon;
    m_data = data;
    } public Icon getIcon()
    {
    return m_icon;
    } public Icon getExpandedIcon()
    {
    return m_expandedIcon!=null ? m_expandedIcon : m_icon;
    } public Object getObject()
    {
    return m_data;
    } public String toString()
    {
    return m_data.toString();
    }
    }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 v = new Vector(); 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(ChooseDir.ICON_FOLDER,
    ChooseDir.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;
    }
    }
    }
      

  3.   

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;public class ChooseDir extends JDialog
    {
    public static final ImageIcon ICON_COMPUTER =
    new ImageIcon(FrameMain.class.getResource("computer.gif"));
    public static final ImageIcon ICON_DISK =
    new ImageIcon(FrameMain.class.getResource("disk.gif"));
    public static final ImageIcon ICON_FOLDER =
    new ImageIcon(FrameMain.class.getResource("folder.gif"));
    public static final ImageIcon ICON_EXPANDEDFOLDER =
    new ImageIcon(FrameMain.class.getResource("expandedfolder.gif"));
            JButton jButtonOK = new JButton("OK");
            JButton jButtonCancel = new JButton("Cancel");
    protected JTree  m_tree;
    protected DefaultTreeModel m_model;
    protected JTextField m_display;
            JTextField m_textPath; public ChooseDir(JTextField jTextpath)
    {
    //super("Directories Tree");
                    this.setModal(true);
    setSize(400, 300);
                    m_textPath = jTextpath; DefaultMutableTreeNode top = new DefaultMutableTreeNode(
    new IconData(ICON_COMPUTER, null, "Computer"));
                    jButtonOK.addActionListener(new java.awt.event.ActionListener() {
                      public void actionPerformed(ActionEvent e) {
                      jButtonOK_actionPerformed(e);
                      }
                    });
                    jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
                      public void actionPerformed(ActionEvent e) {
                      jButtonCancel_actionPerformed(e);
                      }
                    });
    DefaultMutableTreeNode node;
    File[] roots = File.listRoots();
    for (int k=0; k < roots.length; k++)
    {
    node = new DefaultMutableTreeNode(new IconData(ICON_DISK,
    null, new FileNode(roots[k])));
    top.add(node);
                            node.add( new DefaultMutableTreeNode(new Boolean(true)));
    } m_model = new DefaultTreeModel(top);
    m_tree = new JTree(m_model);                m_tree.putClientProperty("JTree.lineStyle", "Angled"); TreeCellRenderer renderer = new IconCellRenderer();
    m_tree.setCellRenderer(renderer); m_tree.addTreeExpansionListener(new DirExpansionListener()); m_tree.addTreeSelectionListener(new DirSelectionListener()); m_tree.getSelectionModel().setSelectionMode(
    TreeSelectionModel.SINGLE_TREE_SELECTION);
    m_tree.setShowsRootHandles(true);
    m_tree.setEditable(false); JScrollPane s = new JScrollPane();
    s.getViewport().add(m_tree);
    getContentPane().add(s, BorderLayout.CENTER); m_display = new JTextField();
    m_display.setEditable(false);
    getContentPane().add(m_display, BorderLayout.NORTH);
                    JPanel p1 = new JPanel();
                    p1.setLayout(new BorderLayout());
                    p1.add(jButtonOK,BorderLayout.WEST);
                    p1.add(jButtonCancel,BorderLayout.EAST);
                    getContentPane().add(p1,BorderLayout.SOUTH); }
            void jButtonOK_actionPerformed(ActionEvent e){
              setVisible(false);
            }
            void jButtonCancel_actionPerformed(ActionEvent e) {
              m_textPath.setText("");
              setVisible(false);
            }
    DefaultMutableTreeNode getTreeNode(TreePath path)
    {
    return (DefaultMutableTreeNode)(path.getLastPathComponent());
    } FileNode getFileNode(DefaultMutableTreeNode node)
    {
    if (node == null)
    return null;
    Object obj = node.getUserObject();
    if (obj instanceof IconData)
      obj = ((IconData)obj).getObject();
    if (obj instanceof FileNode)
      return (FileNode)obj;
    else
      return null;
    }    // Make sure expansion is threaded and updating the tree model
        // only occurs within the event dispatching thread.
        class DirExpansionListener implements TreeExpansionListener
        {
            public void treeExpanded(TreeExpansionEvent event)
            {
                final DefaultMutableTreeNode node = getTreeNode(
                    event.getPath());
                final FileNode fnode = getFileNode(node);            Thread runner = new Thread()
                {
                  public void run()
                  {
                    if (fnode != null && fnode.expand(node))
                    {
                      Runnable runnable = new Runnable()
                      {
                        public void run()
                        {
                           m_model.reload(node);
                        }
                      };
                      SwingUtilities.invokeLater(runnable);
                    }
                  }
                };
                runner.start();
            }        public void treeCollapsed(TreeExpansionEvent event) {}
        }
    class DirSelectionListener implements TreeSelectionListener
    {
    public void valueChanged(TreeSelectionEvent event)
    {
    DefaultMutableTreeNode node = getTreeNode(
    event.getPath());
    FileNode fnode = getFileNode(node);
    if (fnode != null){
    m_display.setText(fnode.getFile().getPath());
                                    m_textPath.setText(fnode.getFile().getPath());
                                    }
    else
    m_display.setText("");
    }
    }
    }class IconCellRenderer  extends    JLabel implements TreeCellRenderer
    {
    protected Color m_textSelectionColor;
    protected Color m_textNonSelectionColor;
    protected Color m_bkSelectionColor;
    protected Color m_bkNonSelectionColor;
    protected Color m_borderSelectionColor; protected boolean m_selected; public IconCellRenderer()
    {
    super();
    m_textSelectionColor = UIManager.getColor(
    "Tree.selectionForeground");
    m_textNonSelectionColor = UIManager.getColor(
    "Tree.textForeground");
    m_bkSelectionColor = UIManager.getColor(
    "Tree.selectionBackground");
    m_bkNonSelectionColor = UIManager.getColor(
    "Tree.textBackground");
    m_borderSelectionColor = UIManager.getColor(
    "Tree.selectionBorderColor");
    setOpaque(false);
    } public Component getTreeCellRendererComponent(JTree tree,
    Object value, boolean sel, boolean expanded, boolean leaf,
    int row, boolean hasFocus) {
    DefaultMutableTreeNode node =
    (DefaultMutableTreeNode)value;
    Object obj = node.getUserObject();
    setText(obj.toString());                if (obj instanceof Boolean)
                      setText("Retrieving data..."); if (obj instanceof IconData)
    {
    IconData idata = (IconData)obj;
    if (expanded)
      setIcon(idata.getExpandedIcon());
    else
      setIcon(idata.getIcon());
    }
    else
    setIcon(null); setFont(tree.getFont());
    setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
    setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
    m_selected = sel;
    return this;
    } public void paintComponent(Graphics g)
    {
    Color bColor = getBackground();
    Icon icon = getIcon(); g.setColor(bColor);
    int offset = 0;
    if(icon != null && getText() != null)
    offset = (icon.getIconWidth() + getIconTextGap());
    g.fillRect(offset, 0, getWidth() - 1 - offset,
    getHeight() - 1); if (m_selected)
    {
    g.setColor(m_borderSelectionColor);
    g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
    }
    super.paintComponent(g);
        }
    }class IconData
    {
    protected Icon   m_icon;
    protected Icon   m_expandedIcon;
    protected Object m_data; public IconData(Icon icon, Object data)
    {
    m_icon = icon;
    m_expandedIcon = null;
    m_data = data;
    } public IconData(Icon icon, Icon expandedIcon, Object data)
    {
    m_icon = icon;
    m_expandedIcon = expandedIcon;
    m_data = data;
    } public Icon getIcon()
    {
    return m_icon;
    } public Icon getExpandedIcon()
    {
    return m_expandedIcon!=null ? m_expandedIcon : m_icon;
    } public Object getObject()
    {
    return m_data;
    } public String toString()
    {
    return m_data.toString();
    }
    }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 v = new Vector(); 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(ChooseDir.ICON_FOLDER,
    ChooseDir.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;
    }
    }
    }
      

  4.   

    忘记修改了,这是我用的程序,你得修改:把import com.borland.jbcl.layout.*;去掉修改public static final ImageIcon ICON_COMPUTER =
    new ImageIcon(FrameMain.class.getResource("images/paste.gif"));

    public static final ImageIcon ICON_COMPUTER =
    new ImageIcon("images/paste.gif")
    其他图标一样修改
      

  5.   

    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.tree.TreeSelectionModel;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;public class LeftTree extends JPanel {  private JPopupMenu popupMenu;
      private JTree tree;
      private DefaultMutableTreeNode top;  private String rootDirectory;
      public LeftTree(String rootDirectory) {
        this.rootDirectory = rootDirectory;    setLayout(new BorderLayout());
        top = new DefaultMutableTreeNode(GlobalVar.SERVERNAME);
        tree = new JTree(top);
        tree.putClientProperty("JTree.lineStyle", "Angled");    tree.getSelectionModel().setSelectionMode
                (TreeSelectionModel.SINGLE_TREE_SELECTION);    tree.addTreeSelectionListener(new TreeSeleListener());
        tree.addMouseListener(new rightMouseListener());    add(new JScrollPane(tree),BorderLayout.CENTER);    Thread t = new Thread(new ListDirectory(top,rootDirectory));
        t.start();
      }  public static void main(String args[]) {
           JFrame frame = new JFrame("LeftTree");
           frame.addWindowListener(new WindowAdapter() {
               public void windowClosing(WindowEvent e) {
                   System.exit(0);
               }
           });       frame.setContentPane(new LeftTree("c:/"));
           frame.pack();
           frame.setVisible(true);
      }
    }class ListDirectory extends Thread{
      DefaultMutableTreeNode rootNode;
      String rootDirectory;  public ListDirectory(DefaultMutableTreeNode website,
                           String rootDirectory) {
        rootNode = website;
        this.rootDirectory = rootDirectory;
      }  public void run() {
        this.addLeaf(rootNode,rootDirectory);
      }  void addLeaf(DefaultMutableTreeNode subNode,
                            String filepath) {
        File path = new File(filepath);
        String[] list;
        list = path.list();
        String filename;    for (int i = 0; i < list.length; i++) {
            DefaultMutableTreeNode fileNode = new
              DefaultMutableTreeNode(list[i]);
            subNode.add(fileNode);
            filename = filepath + "\\" + list[i];
            path = new File(filename);
            if (path.isDirectory())
              addLeaf(fileNode,filename);
        }
      }
    }
      

  6.   

    jimw大哥,简单到是简单,只是谁能受得了753854个目录和文件的搜索。相比之下gdsean(摇滚java)大哥的方法到是不错。非常的好还能自己定义一些选项。各位还有没有其他的方法,没有的话就结账了。~~~小二,买单~~~。(野花剔着牙眼瞅着刚刚迈出门去的苗条少女,喊着。) ~~~来啦,您那,一共是753854元!!!小二低着头看着野花,手托着盘子,盘子里放着象《Java 2 编程详解》一样厚的一打菜单。·#¥245¥%1—%…… “ 嘭!!叮当嘻哗啪,啪—*……”野花从椅子上直窜了上去,头重重的碰在了吊灯上,随后又与吊灯一起重重的砸在小儿身上……