描述:在窗口中输入查找范围(文件夹)和需要找的内容(关键字),找出满足条件的文件个数。
就直接上代码:
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class Frame_Thread_File {
public static void main(String[] args) {
//初始化线程
EventQueue.invokeLater(() -> new MyFrame().setVisible(true));
}
//界面类
/**
* 1.输入框{
* 输入1.项目目录
* 2.查找范围(文件名关键字)
* 3.内容关键字
* }
* 2.搜索按钮{
* 使用长耗时任务线程
* 监听鼠标按钮
* 1.判断输入内容是否合法
* 2.开始搜索
* }
* 3.对话框{
* 提示找到了多少个满足条件的文件
* }
*/
static class MyFrame extends JFrame {
MyFrame() {
setSize(1000, 800);
setLocation(100, 100);
setTitle("查找文件");
setLayout(null);//如果没有这个,设置面板大小失败
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//输入框面板
JPanel io_Panel = new JPanel();
io_Panel.setBounds(10, 10, 200, 100);
JLabel l1 = new JLabel("项目目录:");
JTextField t1 = new JTextField();
t1.setPreferredSize(new Dimension(100, 20));
JLabel l2 = new JLabel("查找内容:");
JTextField t2 = new JTextField();
t2.setPreferredSize(new Dimension(100, 20));
io_Panel.add(l1);
io_Panel.add(t1);
io_Panel.add(l2);
io_Panel.add(t2);
//查找按钮
JPanel button_panel = new JPanel();
JButton b = new JButton("点击查找");
JLabel l = new JLabel();
b.addActionListener(e -> {
SwingWorker worker = new SwingWorker() {
@Override
protected Void doInBackground() {
String folder = t1.getText();
String content = t2.getText();
if (folder.length() == 0 && content.length() == 0) {
JOptionPane.showMessageDialog(null, "输入不能为空!");
return null;
} else {
if (!file_D(folder)) {
JOptionPane.showMessageDialog(null, "文件夹不存在!");
return null;
}
l.setText("正在加载...");
//查找文件
search(folder, content);
JOptionPane.showMessageDialog(null, "有"+count+"个文件");
l.setText("加载完毕");
}
return null;
}
};
worker.execute();
});
button_panel.add(b);
button_panel.add(l);
button_panel.setBounds(300, 30, 80, 80);
add(io_Panel);
add(button_panel);
}
//判断文件是不是文件夹
public static boolean file_D(String s) {
File f = new File(s);
return f.isDirectory();
}
/**查找文件的方法
* 1.项目目录
* 3.内容关键字
*/
static int count = 0;//记录符合要求的文件的个数
public static void search(String folder, String content) {
File file = new File(folder);
File[] files = file.listFiles();//文件夹下的子文件
assert files != null;
for (File f1 : files) {
if (f1.isDirectory()) {
search(f1.getAbsolutePath(), content);
} else {
select(f1, content);
}
}
}
//查找
public static void select(File f, String str) {
try (FileReader fr = new FileReader(f)) {
char[] charArr = new char[(int) f.length()];
fr.read(charArr);
String s = String.copyValueOf(charArr);
if(s.contains(str))
count++;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}