Java简易项目——文件管理器V1

简易文件管理器V1

简介

项目介绍

这是一个初步实现了文件夹和文件查看的项目,可用于熟悉一些Java常用的类,巩固语法的基础。项目包含窗体,按钮,标签,监听器,动态数组,网格布局管理器等。

用到的类

javax.swing下的 JFrame, JLabel, JButton
java.awt下的 GridLayout
java.io下的 File
java.util下的 ArrayList
java.awt.event下的 ActionListener

实现的功能

实现了对特定文件夹下的文件和文件夹的查看。

项目实现

1.实现文件与文件夹在一个窗体上的显示

①创建窗体,这里在自己创建的FileUI类中操作
②根据提供的路径获取获取文件
③储存文件和文件夹
④将文件和文件夹以某种方式显示在窗体上

   public class FileUI {
   static String Path = "E:\\Test";//提供需要显示的文件路径,static修饰方便下一步的调用

    public void showUI() {
        //创建窗体
        JFrame frame = new JFrame();
        frame.setTitle("File Manager");
        frame.setSize(800, 600);
        frame.setLocation(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        File file = new File(Path);//根据给的路径获取文件
        File[] files = file.listFiles();//将文件都储存在File的数组中
        int column = 5;//设定窗口每列放四个文件
        int row = (files.length / column) + 1;//计算放下所有文件所需的行数,不足一行则加一行
        GridLayout layout = new GridLayout(row, column, 10, 10);//使用网格布局(传入行列的数量)
        frame.setLayout(layout);
        //用动态数组存储文件名称
        ArrayList<String> dirNameList = new ArrayList<>();//文件夹
        ArrayList<String> fileNameList = new ArrayList<>();//文件 
        //遍历文件数组
        for (int i = 0; i < files.length; i++) {
            File file1 = files[i];//取出每一个文件
            if (!file1.isHidden()) {    //隐藏的文件不显示
                if (file1.isDirectory()) {
                    dirNameList.add(file1.getName());//将文件夹放入存储文件夹的数组
                } else {
                    fileNameList.add(file1.getName());//将文件放入存储文件的数组
                }
            }
        }
        //显示文件夹和文件(文件夹用按钮,文件用标签)
       	 for (int i = 0; i < dirNameList.size(); i++) {
            JButton button = new JButton(dirNameList.get(i));//创建一个按钮,并用文件夹名当文本
            button.setBackground(Color.GRAY);//设置按钮背景颜色为灰色
            frame.add(button);
        }
         for (int i = 0; i < fileNameList.size(); i++) {
            JLabel jla = new JLabel(fileNameList.get(i));//创建一个标签,并用文件名当文本
            jla.setBackground(Color.CYAN);//设置标签背景颜色为青色
            frame.add(jla);
        }
        frame.setVisible(true);//将窗体设置为可见
    }
}

到此为止,实现了E盘下Test文件夹下的所有文件的显示。用主函数调用便可实现功能。

2.实现文件夹的打开

①创建监听器类,这里在自己创建的FileOPListener类中操作
②继承动作监听器接口
③为按钮添加动作监听器,实现点击按钮显示被点击文件夹下的内容
*即打开一个新的窗口显示文件,与上面的内容大同小异

public class FileOPListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        String dirName = e.getActionCommand();//获取文件名
        File file = new File(FileUI.Path + "\\" + dirName);//被点击文件名的文件
        //检测到按钮被点击就调用下面的打开文件夹方法,并传入被点击的文件参数
        showFileDir(file);
    }
    //封装打开文件夹的方法(跟上面实现显示文件的功能的代码大同小异)
    public void showFileDir(File dirFile){   //参数为文件
        JFrame fileFrame = new JFrame();
        fileFrame.setTitle(dirFile.getName());
        fileFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        fileFrame.setSize(800, 600);
        fileFrame.setLocationRelativeTo(null);
        File[] files = dirFile.listFiles();//这里的数组存入的是被点击的文件夹下的文件
        int column = 4;
        int row = (files.length / column) + 1;
        GridLayout layout = new GridLayout(row,column,10,10);
        fileFrame.setLayout(layout);

        ArrayList<String> dirNameList = new ArrayList<>();
        ArrayList<String> fileNameList = new ArrayList<>();
		//遍历文件
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            if (!file.isHidden()) {
                if (file.isDirectory()) {
                    dirNameList.add(file.getName());
                } else {
                    fileNameList.add(file.getName());
                }
            }
        }
        for (int i = 0; i < dirNameList.size(); i++) {
            JButton dirButton = new JButton(dirNameList.get(i));
            dirButton.setBackground(Color.GRAY);
            fileFrame.add(dirButton);
        }
        for (int i = 0; i < fileNameList.size(); i++) {
            JLabel jla = new JLabel(fileNameList.get(i));
            jla.setBackground(Color.CYAN);
            fileFrame.add(jla);
        }
        fileFrame.setVisible(true);
    }
}

下面再为第一步中的按钮添加监听器后再调用即可实现功能。不难发现,上面的代码仅实现了打开“一层”文件夹的功能,下面在此基础上来完善打开多层文件夹的功能。

3.实现多层文件夹的显示

前置知识:ActionCommand是JButton的一个属性,不会显示到按钮的文本上,使用动作监听器可以获取,但默认是空,当我们调用getActionCommand时,若我们为其ActionCommand赋值,则调用getActionCommand时能得到的返回值即为我们设置的内容,否则返回按钮上的文本。
下面是源代码

public String getActionCommand() {
        String ac = getModel().getActionCommand();
        if(ac == null) {
            ac = getText();
        }
        return ac;
    }

所以,我们可以在创建按钮时,就将按钮的ActionCommand设置为所点击的文件夹的路径,这样,在调用getActionCommand时,我们就每次都能获取文件路径,从而获取文件用于传入打开文件夹的方法,进而打开文件夹。
下面在上面的代码的基础上进行一点修改即可实现功能。

完整代码如下
FileUI类

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;

public class FileUI {
    static String Path = "E:\\Test";
    FileOPListener listener = new FileOPListener();
    public void showUI(){
        //创建窗体
        JFrame frame = new JFrame();
        frame.setTitle("File Manager");
        frame.setSize(800, 600);
        frame.setLocation(300,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //根据路径获取文件
        File file = new File(Path);
        //创建储存文件的数组
        File[] files = file.listFiles();
        //计算出要显示的文件
        int column = 5;
        int row = (files.length / column) + 1;
        //使用网格布局
        GridLayout layout = new GridLayout(row,column,10,10);
        frame.setLayout(layout);
        //用动态数组存储文件夹名称
        ArrayList<String> dirNameList = new ArrayList<>();
        ArrayList<String> fileNameList = new ArrayList<>();
        frame.addMouseListener(listener);
        //遍历文件数组,区分文件和文件夹,再存入数组
        for (int i = 0; i < files.length; i++) {
            File file1 = files[i];
            if(!file1.isHidden()){
                if(file1.isDirectory()){
                    dirNameList.add(file1.getName());
                }else{
                    fileNameList.add(file1.getName());
                }
            }
        }
        //创建按钮(文件夹) 和 标签(文件)
        for (int i = 0; i < dirNameList.size(); i++) {
            JButton button = new JButton(dirNameList.get(i));
            button.setBackground(Color.GRAY);
            button.addActionListener(listener);//为按钮添加监听器
            //给ActionCommand属性赋值,赋值为文件的全局路径
            button.setActionCommand(Path + "\\" + dirNameList.get(i));
            frame.add(button);
        }
        for (int i = 0; i < fileNameList.size(); i++) {
            JLabel jla = new JLabel(fileNameList.get(i));
            jla.setBackground(Color.CYAN);
            frame.add(jla);
        }
        frame.setVisible(true);
    }
}

FileOPListener类

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;

public class FileOPListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        //获取文件夹的全局路径
        String dirPath = e.getActionCommand();
        File file = new File(dirPath);
        showFileDir(file);
    }
    //封装打开文件夹的方法
    public void showFileDir(File dirFile){
        JFrame fileFrame = new JFrame();
        fileFrame.setTitle(dirFile.getName());
        fileFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        fileFrame.setSize(800, 600);
        fileFrame.setLocationRelativeTo(null);
        File[] files = dirFile.listFiles();
        int column = 4;
        int row = (files.length / column) + 1;
        GridLayout layout = new GridLayout(row,column,10,10);
        fileFrame.setLayout(layout);

        ArrayList<String> dirNameList = new ArrayList<>();
        ArrayList<String> fileNameList = new ArrayList<>();

        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            if (!file.isHidden()) {
                if (file.isDirectory()) {
                    dirNameList.add(file.getName());
                } else {
                    fileNameList.add(file.getName());
                }
            }
        }
        for (int i = 0; i < dirNameList.size(); i++) {
            JButton dirButton = new JButton(dirNameList.get(i));
            dirButton.setBackground(Color.GRAY);
            dirButton.setActionCommand(dirFile.getAbsolutePath() + "\\" + dirNameList.get(i));//给ActionCommand属性赋值,赋值为被点击的文件夹的全局路径,用于点击按钮后获取路径
            fileFrame.add(dirButton);
            dirButton.addActionListener(this);//为按钮添加监听器
        }
        for (int i = 0; i < fileNameList.size(); i++) {
            JLabel jla = new JLabel(fileNameList.get(i));
            jla.setBackground(Color.CYAN);
            fileFrame.add(jla);
        }
        fileFrame.setVisible(true);
    }
}

4.效果展示

请添加图片描述

请添加图片描述

总结

该项目仅是简单实现了文件的查看,其他功能亟待补充。下次将在此基础上添加创建与删除文件的功能和打开文件的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值