Java之IO(File类)

来源:互联网 发布:域名后缀无法提交备案 编辑:程序博客网 时间:2024/05/22 11:34
  • 定义:首先是一个普通类,可以直接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);    }}
0 0
原创粉丝点击