- 定义:首先是一个普通类,可以直接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);
}
}