首页

文章

Java实现读取某个路径下的文件目录

发布网友 发布时间:2022-04-19 12:24

我来回答

1个回答

热心网友 时间:2023-08-26 07:24

import javax.swing.*;

import javax.swing.table.AbstractTableModel;

import javax.swing.table.TableCellRenderer;

import javax.swing.event.TreeModelListener;

import javax.swing.event.TreeSelectionListener;

import javax.swing.event.TreeSelectionEvent;

import javax.swing.tree.TreeModel;

import javax.swing.tree.TreePath;

import javax.swing.tree.TreeCellRenderer;

import java.awt.*;

import java.awt.event.*;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.FileFilter;

import java.util.Calendar;

import java.util.ArrayList;

import java.text.SimpleDateFormat;

import java.text.MessageFormat;

/**

 * @author Hardneedl

 */

class JavaExplorer extends JFrame {

    private static final Dimension minSize = new Dimension(300, 200);

    private static final Dimension maxSize = new Dimension(1024, 768);

    private static final Dimension preferredSize = new Dimension(600, 400);

    private JLabel statusLabel;

    private JTree tree;

    private JTable detailTable;

    private FileTableModel tableModel;

    public Dimension getMaximumSize() {return maxSize;}

    public Dimension getMinimumSize() {return minSize;}

    public Dimension getPreferredSize() {return preferredSize;}

    public String getTitle() {return "Java Explorer";}

    JavaExplorer() throws HeadlessException {

        init();

        doLay();

        attachListeners();

    }

    private void init() {

        statusLabel = new JLabel(){public Color getForeground() {return Color.BLUE;}};

        tree = new JTree(new FileTreeModel());

        tree.setCellRenderer(new DirCellRenderer());

        detailTable = new JTable(tableModel = new FileTableModel());

        detailTable.getColumnModel().getColumn(2).setCellRenderer(new TableCellRenderer(){

            private JLabel label=new JLabel();

            private final SimpleDateFormat format = new SimpleDateFormat("yyyy年mm月dd日 HH时MM分ss秒"); 

            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

                if (value instanceof Calendar){

                    Calendar cal = (Calendar)value;

                    label.setText(  format.format(cal.getTime()) );

                }

                return label;

            }

        });

        detailTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer(){

            private JLabel label = new JLabel();

            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

                if (value instanceof File) {

                    File f = (File)value;

                    label.setText(f.getName());

                    label.setForeground( f.isDirectory()? Color.RED : Color.BLACK);

                }

                return label;

            }

        });

    }

    private void doLay() {

        Container container = getContentPane();

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tree), new JScrollPane(detailTable));

        container.add(splitPane,BorderLayout.CENTER);

        container.add(statusLabel,BorderLayout.SOUTH);

        pack();

    }

    private void attachListeners() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        tree.addTreeSelectionListener(new SelectionListener());

        tree.addTreeSelectionListener(new _DirSelectionListener());

        DirCellSelectedListener ck =new DirCellSelectedListener(tree);

        detailTable.addKeyListener(ck);

        detailTable.addMouseListener(ck);

    }

    public static void main(String[] args) {

        new JavaExplorer().setVisible(true);

    }

    private class FileTreeModel implements TreeModel {

        static final String root = "我的电脑";

        private File[] rootFiles;

        private final FileFilter dirFilter = new FileFilter(){

            public boolean accept(File f) {return f.isDirectory();}

        };

        private FileTreeModel() {rootFiles = File.listRoots();}

        public Object getRoot() {return root;}

        public Object getChild(Object parent, int index) {

            if (parent==getRoot())  return rootFiles[index];

            if (parent instanceof File) {

                File pf = (File)parent;

                return pf.listFiles(dirFilter)[index];

            }

            return null;

        }

        public int getChildCount(Object parent) {

            if (parent == getRoot())  return rootFiles.length;

            

            if (parent instanceof File){

                File pf = (File)parent;

                File[] fs = pf.listFiles(dirFilter);

                return fs == null?0:fs.length;

            }

            return 0;

        }

        public boolean isLeaf(Object node) {return false;}

        public void valueForPathChanged(TreePath path, Object newValue) {}

        public void addTreeModelListener(TreeModelListener l) {}

        public void removeTreeModelListener(TreeModelListener l) {}

        public int getIndexOfChild(Object parent, Object child) {

            if (parent == getRoot()) {

                for (int i = 0,j=rootFiles.length; i < j; i++)

                    if (rootFiles[i]==child) return i;

            }

            if (parent instanceof File) {

                File pf = (File)parent;

                File[] fs = pf.listFiles(dirFilter);

                for (int i = 0,j=fs.length; i < j; i++) {

                    if (fs[i].equals(child)) return i;

                }

            }

            return -1;

        }

    }

    private class FileTableModel extends AbstractTableModel {       

        public int getRowCount() {return dir==null||dir.isFile()?0:dir.listFiles().length;}

        public int getColumnCount() {return 3;}

        private File dir;

        private void setDir(File dir){

            this.dir = dir;

            fireTableDataChanged();

        }

        public Class<?> getColumnClass(int columnIndex) {

            switch(columnIndex) {

                case 0:return File.class;

                case 1:return Integer.class;

                case 2:return Calendar.class;

                default:return String.class;

            }

        }

        public String getColumnName(int column) {

            switch (column) {

                case 0: return "名称";

                case 1: return "大小";

                case 2: return "修改日期";

                default:return "";

            }

        }

        public Object getValueAt(int rowIndex, int columnIndex) {

            File[]fs=dir.listFiles();

            File f = fs[rowIndex];

            switch(columnIndex){

                case 0:return f;

                case 1:

                    if (f.isDirectory()) return null;

                    try {

                        if (f.canRead())

                        return new FileInputStream(f).available();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                case 2:

                    Calendar cl = Calendar.getInstance();

                    cl.setTimeInMillis(f.lastModified());

                    return cl;

            }

            return null;

        }

    }

    private class _DirSelectionListener implements TreeSelectionListener {

        public void valueChanged(TreeSelectionEvent e) {

            TreePath path = e.getNewLeadSelectionPath();

            if (path!=null){

                Object obj =  path.getLastPathComponent();

                if (obj instanceof File) {

                    File f = (File)obj;

                    File[] fs = f.listFiles();

                    statusLabel.setText(fs==null?null:MessageFormat.format("{0}个文件",fs.length ));

                }

                else

                    statusLabel.setText(null);                

            }

        }

    }

    private class DirCellRenderer extends JLabel implements TreeCellRenderer {

        public boolean isOpaque() {return true;}

        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

            if (value instanceof File){

                String s = ((File)value).getName();

                setText(s.isEmpty()?value.toString() : s);

            }

            else

                setText(value.toString());

            setForeground(selected? Color.BLUE : Color.BLACK);

            setBackground(selected? Color.YELLOW : Color.WHITE);

            return this;

        }

    }

    private class SelectionListener implements TreeSelectionListener{

        public void valueChanged(TreeSelectionEvent e) {

            Object obj = e.getNewLeadSelectionPath().getLastPathComponent();

            if (obj instanceof File) {

                tableModel.setDir((File)obj);

            }

        }

    }

    private class DirCellSelectedListener implements KeyListener, MouseListener {

        private JTree tree;

        private DirCellSelectedListener(JTree t) {tree=t;}

        private void action(InputEvent e){

            if (e instanceof MouseEvent) {

            }

            if (e instanceof KeyEvent) {

            }

        }

        private void expand(File f){

            if (f.isDirectory()) {

                ArrayList<File> L = new ArrayList<File>();

                L.add(f);

                File parentFile = f.getParentFile();

                while (parentFile != null) {

                    L.add(parentFile);    

                    parentFile = parentFile.getParentFile();

                }

                TreePath treePath = new TreePath(FileTreeModel.root);

                for (int i = L.size()-1; i > -1; i--) {

                    treePath = treePath.pathByAddingChild(L.get(i));

                }                

                tree.setSelectionPath(treePath);

            }

        }

        public void keyTyped(KeyEvent e) {}

        public void keyPressed(KeyEvent e) {

            if (e.getKeyCode() != KeyEvent.VK_ENTER) return;

            if (e.getSource() == detailTable) {

                int row = detailTable.getSelectedRow();

                if (row!=-1){

                    File f = (File)detailTable.getValueAt(row,0);

                    expand(f);

                }

            }

        }

        public void keyReleased(KeyEvent e) {

        }

        public void mouseClicked(MouseEvent e) {

            if (e.getClickCount()==2) {

                if(e.getSource()==detailTable){

                    int row = detailTable.getSelectedRow();

                    if (row!=-1){

                        File f = (File)detailTable.getValueAt(row,0);

                        expand(f);

                }

                }

            }

        }

        public void mousePressed(MouseEvent e) {

        }

        public void mouseReleased(MouseEvent e) {

        }

        public void mouseEntered(MouseEvent e) {

        }

        public void mouseExited(MouseEvent e) {

        }

    }

}

土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 java怎么循环读取目录下的文件内容 java怎么得到本机某一文件夹下所有文件的名字 java怎么读取某个文件夹下边的所有文件的名字? java怎么读取一个文件夹下的文件 java中如何获取目录中的所有文件 java怎么获取当前文件夹下有特定文件名的文件 关于java获取文件夹下文件的数目 java怎么获取一个目录下的所有文件名 java如何取得文件夹下所有的子目录 java怎么获取文件夹下最新的文件 java中在怎么读取文件夹中的内容 java怎样获得某个目录下所有文件的文件名 java怎么样获取路径下的文件? java 怎么获取指定路径下的文件 java如何获取文件信息? java中怎样获得一个文件夹中的所有文件名 重阳节又称什么节 重阳节又被称为“敬老节”,为何会有这种别称? 重阳节又称什么 java读取文件夹下txt文件中特定信息(很急求解!!!) 拼夕夕砍软件真的吗? 拼夕夕的砍价免费拿活动是真的假的? 淘宝买拼夕夕砍价可以退款嘛? 为什么那么多人喜欢在拼夕夕上买东西? 拼多多吞刀怎么破? 怎么投诉拼夕夕真人代砍 拼夕夕砍价蓝码 拼多多还差两分一直被吞刀怎么办? 有什么办法防止拼多多吞刀? 拼多多有什么方法快速砍价 看这个字怎么读? 有哪里可以薅羊毛得嘛,拼夕夕太麻烦了,心累? 在拼多多里面帮别人砍价会不会泄露个人信息? 参加拼多多砍价活动有风险吗?会不会被盗号? 不用芝麻信用分能代款和拼多多砍价吗) 求一个真实可靠的手机赚钱软件 手机赚钱要用什么app比较靠谱? 手抓饼机器买了最先怎么做手抓饼 怎样制作手抓饼视频
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com