您的位置:首页 > 编程语言 > Java开发

个人学习总结二多线程文件搜索(界面版)

2014-10-21 13:04 411 查看
文件搜索程序源码
项目描述:
选择文件夹,找到包含对应关键字的文件
在Eclipse中建立so_file的工程

建立SOFile.java文件

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Vector;

import javax.swing.JButton;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class SOFile extends JFrame {

private JTextField textField_1;
private JList list;
private JTextField ext;
private JTextField textField;

/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SOFile frame = new SOFile();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame
*/
public SOFile() {
super();
setResizable(false);
getContentPane().setLayout(null);
setBounds(100, 100, 356, 426);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

textField = new JTextField();
textField.setBounds(10, 27, 275, 28);
getContentPane().add(textField);

final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {

JFileChooser f = new JFileChooser();

f.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
f.showOpenDialog(SOFile.this);
File selectFile = f.getSelectedFile();
if (selectFile != null) {
textField.setText(selectFile.getPath());
}

}
});
button.setText("...");
button.setBounds(286, 27, 53, 28);
getContentPane().add(button);

final JLabel label = new JLabel();
label.setText("搜索路径:");
label.setBounds(10, 3, 138, 18);
getContentPane().add(label);

final JLabel label_1 = new JLabel();
label_1.setText("后缀:");
label_1.setBounds(10, 61, 66, 18);
getContentPane().add(label_1);

ext = new JTextField();
ext.setText(".txt,.java,.jsp,.html,.htm,.xml,.ini,.log");
ext.setBounds(10, 85, 329, 28);
getContentPane().add(ext);

final JButton button_1 = new JButton();
button_1.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {

list.setListData(new Vector());
new FileAction(ext.getText(), textField.getText(), textField_1
.getText(), list);

}
});
button_1.setText("开始搜索");
button_1.setBounds(233, 143, 106, 28);
getContentPane().add(button_1);

final JLabel label_2 = new JLabel();
label_2.setText("关键字");
label_2.setBounds(10, 119, 66, 18);
getContentPane().add(label_2);

final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 178, 329, 213);
getContentPane().add(scrollPane);

list = new JList();
scrollPane.setViewportView(list);

textField_1 = new JTextField();
textField_1.setText("java学习");
textField_1.setBounds(10, 143, 217, 28);
getContentPane().add(textField_1);
//
}

}
建立

FileAction.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.LinkedList;
import java.util.Vector;

import javax.swing.JList;

public class FileAction extends Thread {

private String ext;
private String soPath;
private String key;
private JList list;

public FileAction(String ext, String soPath, String key, JList list) {

this.ext = ext;
this.soPath = soPath;
this.key = key;
this.list = list;
// list.setListData(arg0)

this.start();

}

public void run() {

// 开始搜索文件
getFile(new File(soPath));

new SoKey().start();
new SoKey().start();
new SoKey().start();
new SoKey().start();
new SoKey().start();

}

Vector f1 = new Vector();

public class SoKey extends Thread {

public void run() {

try {
while (true) {
File f = null;
synchronized (files) {
f = files.removeLast();
}

BufferedReader rio = new BufferedReader(new FileReader(f));
String line = null;
while ((line = rio.readLine()) != null) {

if (line.indexOf(key) >= 0) {
f1.add(f.getPath());
list.setListData(f1);
break;
}

}
rio.close();
}
} catch (Exception e) {
// TODO: handle exception
}

}
}

LinkedList<File> files = new LinkedList();

public void getFile(File f) {

if (f.isFile()) {

for (String e : ext.split(",")) {
if (f.getName().toLowerCase().endsWith(e.toLowerCase())) {
files.add(f);
break;
}
}

} else {
File fs[] = f.listFiles();
if (fs != null) {

for (File file : fs) {
getFile(file);
}
}
}

}
}


运行界面

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 界面 java