黑马程序员技术交流社区
标题:
查找文件
[打印本页]
作者:
lvwangxiao
时间:
2016-3-19 22:24
标题:
查找文件
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class FileSearchFrame extends JFrame{
//添加标签
private JLabel lab1 = new JLabel("目录:");
//路径文本框
private JTextField txtPath = new JTextField();
//标签
private JLabel lab2 = new JLabel("关键字:");
//关键字文本框
private JTextField txtKey = new JTextField();
//结果标签
//按钮
private JLabel labResult = new JLabel();
JButton butSearch = new JButton("搜索");
//文本域
JTextArea txtResult = new JTextArea();
//定义文件/文件夹记数字
int dirCount = 0;
int fileCount = 0;
public FileSearchFrame(){
init();
addComponent();
}
private void init(){
//设置窗体大小不可变
this.setResizable(false);
//设置大小
this.setSize(650,440);
//设置标题
this.setTitle("文件搜索");
//设置居中
FrameTools.centerFrame(this);
//设置布局
this.setLayout(null);
//设置关闭动作
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
private void addComponent() {
lab1.setBounds(30, 30, 80, 25);
this.add(lab1);
txtPath.setBounds(70, 30, 300, 25);
this.add(txtPath);
lab2.setBounds(390, 30, 80, 25);
this.add(lab2);
txtKey.setBounds(440, 30, 100, 25);
this.add(txtKey);
butSearch.setBounds(570, 30, 60, 25);
butSearch.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
butSearchClick();
}
});
this.add(butSearch);
//JScrollPane
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(30, 70, 600, 300);
//搜索结果文本域
scrollPane.setViewportView(txtResult);
this.add(scrollPane);
//标签
this.labResult.setBounds(30, 380, 600, 25);
this.add(labResult);
}
//点击搜索按钮方法
private void butSearchClick(){
//获取目录
String dirPath = txtPath.getText();
File dir = new File(dirPath);
//判断目录是否存在
if(!dir.exists()){
//为用户提示您输入的文件夹不存在,请仔细检查
JOptionPane.showMessageDialog(this, "您输入的文件夹不存在,请仔细检查","信息有误",JOptionPane.ERROR_MESSAGE);
return;
}
//判断是否是文件夹
if(!dir.isDirectory()){
//为用户提示您输入的不是文件夹,请仔细检查
JOptionPane.showMessageDialog(this, "您输入的不是文件夹,请仔细检查!","信息有误",JOptionPane.ERROR_MESSAGE);
return;
}
//获取关键字
String key = txtKey.getText();
//判断关键字是否已输入
if(key.trim().equals("")){
//为用户提示请输入关键字
JOptionPane.showMessageDialog(this, "请输入关键字!","信息有误",JOptionPane.ERROR_MESSAGE);
return;
}
//调用方法,将指定文件夹中包含关键字的文件或文件夹放到主窗口文本域
searchFile(dir,key);
//设置结果JLabel
labResult.setText("目录:" + dirCount + "个 文件:" + fileCount + "个");
}
//搜索文件--递归方法
//将指定文件夹中包含关键字的文件或文件夹放到主窗口文本域
//将符合条件的文件或文件夹个数进行统计
private void searchFile(File dir, String key){
//获取该文件夹下所有的文件对象(文件夹与文件)
File[] filesorDirs = dir.listFiles();
//遍历数组,依次获取每一个文件对象
for(File fileorDir : filesorDirs){
//如果是文件
if(fileorDir.isFile()){
//进行文件处理
//获取文件名
String fileName = fileorDir.getName();
//判断文件名是否包含
if(fileName.contains(key)){
//将符合条件的文件数+1
fileCount++;
//如果包含,将文件的绝对路径打印到文本域
String fileAbsPath = fileorDir.getAbsolutePath();
txtResult.append(fileAbsPath+"\r\n");
}
}
//如果是文件夹
if(fileorDir.isDirectory()){
//判断文件名是否包含
if(fileorDir.getName().contains(key)){
//将符合条件的文件夹数+1
dirCount++;
//如果包含,就将文件夹的绝对路径打印到文本域
String fileAbsPath = fileorDir.getAbsolutePath();
//向文本域中追加内容
txtResult.append(fileAbsPath + "\r\n");
}
//进行文件夹处理
searchFile(fileorDir,key);
}
}
}
public static void main(String[] args) {
new FileSearchFrame().setVisible(true);
}
}
复制代码
作者:
向北_
时间:
2016-3-19 22:32
顶 。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2