Java之IO(File类)

  • 定义:首先是一个普通类,可以直接new,字面意思就是文件,但其实是包含了对文件和文件夹的操作
  • 常用的构造方法:

    • File(String pathname) :通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
  • 常用的方法:

    • exists() :测试此抽象路径名表示的文件或目录是否存在,返回一个boolean类型的值
    • getAbsoluteFile() :返回此抽象路径名的绝对路径名形式。
    • getName() :返回由此抽象路径名表示的文件或目录的名称。
    • getName() :返回由此抽象路径名表示的文件或目录的名称。
    • getPath() :将此抽象路径名转换为一个路径名字符串。(相对路径)
    • isDirectory() :测试此抽象路径名表示的文件是否是一个目录,返回一个boolean类型的值
    • isFile() :测试此抽象路径名表示的文件是否是一个标准文件,返回一个boolean类型的值
    • listFiles() :返回一个File类型的数组,这些路径名表示此抽象路径名表示的目录中的文件。
    • mkdirs() : 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
  • 通过上面学到的我们做一个文件搜索器,如下图:
    这里写图片描述

    • 步骤:
      • 第一步:创建一个窗体(如上图)
      • 第二步:对搜索按钮添加一个事件监听器,当点击搜索按钮的 时候,我们通过输入的路径和关键字,进行搜索,并统计出搜索出的文件个数
        • 判断输入的路径是否为空
        • 判断是文件还是文件夹
        • 如果是文件,则将文件的个数加1,并将文件的路径通过一个集合存放起来
        • 如果是文件夹,则文件夹个数加1,然后进行通过递归遍历文件夹
      • 第三步:将得到的数据显示在窗体上对应的组件中

代码如下:

/** 第一步,窗体 **/
package com.cwt.FileSearchService;

import javax.swing.JFrame;

public abstract class MyFrame extends JFrame {
    //为了方便,我们自己写一个窗体父类
    public MyFrame() {
        this("未命名");
    }

    public MyFrame(String title) {
        this(title, 500, 400);
    }

    public MyFrame(String title, int width, int height) {
        setTitle(title);
        setSize(width, height);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(3);
        add();
        setVisible(true);
    }

    public abstract void add();
}

//继承上面的父类,真正实现我们的窗体
package com.cwt.FileSearchService;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Ui extends MyFrame implements ActionListener {

    FileSearchService fss;
    JLabel labelFolderNum;
    JLabel labelFileNum;
    JTextArea taPath;
    private JTextField tfKey;
    private JTextField tfPath;

    public Ui(String title, int width, int height) {

        // 设置窗体属性
        super(title, width, height);
    }

    @Override
    public void add() {
        this.setLayout(new FlowLayout());

        // 添加组件
        JLabel labelPath = new JLabel("文件路径:");
        this.add(labelPath);
        tfPath = new JTextField(15);
        this.add(tfPath);
        // --------------------------------------------------------------------
        JLabel labelKey = new JLabel("关键字:");
        this.add(labelKey);
        tfKey = new JTextField(5);
        this.add(tfKey);
        // ----------------------------------------------------------------------
        JButton btnSearch = new JButton("搜索");
        this.add(btnSearch);
        // 事件

        btnSearch.addActionListener(this);

        // ----------------------------------------------------------------------
        JLabel labelFolder = new JLabel("文件夹个数:");
        this.add(labelFolder);
        // ----------------------------------------------------------------------
        labelFolderNum = new JLabel();
        this.add(labelFolderNum);
        // ----------------------------------------------------------------------
        JLabel labelFile = new JLabel("文件个数:");
        this.add(labelFile);
        // ----------------------------------------------------------------------
        labelFileNum = new JLabel();
        this.add(labelFileNum);
        // ----------------------------------------------------------------------
         taPath = new JTextArea(15, 35);
        // ----------------------------------------------------------------------
        JScrollPane spPath = new JScrollPane(taPath);
        this.add(spPath);


    }

    @Override
    public void actionPerformed(ActionEvent e) {
    //在这里写搜索按钮事件监听,调用我们的搜索服务类,
    //将我们的搜索完的数据显示在窗体中
        fss = new FileSearchService(tfPath.getText(), tfKey.getText());
        labelFolderNum.setText("" + fss.folderNum);
        labelFileNum.setText("" + fss.fileNum);
        for (int i = 0; i < fss.listFile.size(); i++) {

            taPath.append(fss.listFile.get(i) + "\n\r");
        }

    }
}

/** 第二步,实现搜索按钮的监听(文件搜索的核心代码) **/

package com.cwt.FileSearchService;

import java.io.File;
import java.util.ArrayList;

public class FileSearchService {
    String path = null;// 路径
    String key = null;// 关键字

    int fileNum = 0;// 文件数
    int folderNum = 0;// 文件夹数

    ArrayList<String> listFile = new ArrayList<String>();

    public FileSearchService(String path, String key) {
        this.path = path;
        this.key = key;
        fileSearch(path, key);

    }

    public void fileSearch(String path, String key) {
        File file = new File(path);
        if (file.exists()) {
            if (file.isDirectory()) { // 如果是文件夹

                folderNum++;

                File[] fileList = file.listFiles();// 获取文件夹下的所有东西

                for (int i = 0; i < fileList.length; i++) {
                    // 遍历问件下所有东西,进行递归
                    fileSearch(fileList[i].getPath(), key);

                }

            } else {// 如果是文件,判断和关键字是否有相同部分,则保存他的路径
                if (file.getName().contains(key)) {

                    fileNum++;
                    listFile.add(file.getAbsolutePath());
                }
            }
        }
    }
}

//测试类
package com.cwt.FileSearchService;

public class Test {
    public static void main(String[] args) {
        new Ui("文件搜索器", 500, 400);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值