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

文件搜索程序源码

项目描述:

选择文件夹,找到包含对应关键字的文件

在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);
				}
			}
		}

	}
}

运行界面


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值