初学java--文件搜索器

 最近学习了java中关于文件的一些处理方法,比如新建文件 ,查找文件

,自定义文件格式等等......
 一般我们把文件分为两大类:文本文件和流文件。文本文件是指文件后

缀名为.txt和.java的文件,其存储字节为16位;流文件是指图片、音乐、视频

等文件,其存储字节用8位。
 关于文件搜索器,首先根据要搜索的文件名和盘符在当前盘符查找

,如果没有找到与输入的文件名一样的文件就进入下一级目录,递归调用查找文

件的方法。在查找文件的时候会用到的方法有:
exists():测试此抽象路径名表示的文件或目录是否存在。
listFiles(): 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的

目录中的文件。
isDirectory(): 测试此抽象路径名表示的文件是否是一个目录。
isFile():测试此抽象路径名表示的文件是否是一个标准文件。
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

下面是文件搜索器的代码:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MyFileFrame extends JFrame{
//程序入口
public static void main(String[] args){
MyFileFrame ff=new MyFileFrame();
ff.shoWUI();
}
//显示界面的方法
private void shoWUI() {
// 设置界面属性
this.setSize(new Dimension(580,500));
this.setBackground(java.awt.Color.GRAY);
this.setTitle("文件搜索器");
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
//创建一个文本标签
JLabel label=new JLabel("请输入需要查找的文件或文件夹名:");
//创建一个文本区域
JTextField filed=new JTextField(15);
//创建一个文本标签
JLabel label2=new JLabel("查找的范围为:");
//得到一个数组
String[] array=getroot();
//新建一个CombBox
JComboBox com=new JComboBox(array);
//添加按钮
JButton start=new JButton("开始搜索");
JButton stop=new JButton("停止搜索");
//创建一个textarea并初始化行和列
JTextArea ta=new JTextArea(21,50);
//创建一个面板
JScrollPane pan=new JScrollPane(ta);
pan.setSize(300, 300);
this.add(label);
this.add(filed);
this.add(label2);
this.add(com);
this.add(start);
this.add(stop);
this.add(pan);
this.setVisible(true);
//创建时间处理类的对象
FileListener fl=new FileListener(filed,ta,com);
start.addActionListener(fl);
stop.addActionListener(fl);

}
/**
* 获取所有的根目录
*/
public String [] getroot(){
//使用文件对象,得到当前系统下所有的根目录
File [] list = File.listRoots();
//创建一个String数组,长度是从File数组中获取的
String [] array = new String [list.length];
//循环输出
for(int i=0;i<list.length;i++){
//得到目录路径
String path = list[i].getAbsolutePath();
//将路径存入到数组中
array[i] = path;
System.out.println("目录:"+list[i]);
}
return array;
}

}

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.swing.JComboBox;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class FileListener implements ActionListener {
	//定义一个命令属性
	private String command;
	//定义一个计数器
	private int filecount=0;
	private	JTextField filed;
	private JComboBox com;
	private JTextArea ta;
	//在构造器里面初始化属性
	public FileListener(JTextField filed,JTextArea ta,JComboBox com){
		this.filed=filed;
		this.ta=ta;
		this.com=com;
	}
	
	//鼠标点击的事件处理
	public void actionPerformed(ActionEvent e) {
		// 得到点击的命令
		command=e.getActionCommand();
		//判断命令
		if(command.equals("开始搜索")){
			System.out.println("*********************************");
			//得到搜索的盘符
			String pathName=(String) com.getSelectedItem();
			//调用文件搜索的方法
			int count = 0;
			try {
				count = FileCheck(pathName);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
			//查找结果
			ta.append("总共查找文件数:"+count+"\t查找到的文件数:"+this.filecount);
		}
		
	}
	/**
	 * 文件搜索的方法
	 * @return 搜索次数
	 * @throws Exception 
	 */
	private int FileCheck(String pathName) throws Exception {
		// 定义一个计数器
		int count = 0;
		//得到需要查找的文件或目录名
		String fileName=filed.getText();
		//创建一个File对象
		File file=new File(pathName);
		//判断文件是否存在
		if(file.exists()){
			//返回file下一级的所有目录和文件
			File[] listFile = file.listFiles();
			// 判断是否还有文件或者文件目录
			if (null == listFile || listFile.length == 0) {
				return 0;
			}
			for(int i=0;i<listFile.length;i++){
				
				//如果是目录
				if(listFile[i].isDirectory()){
					//得到每一个目录的路径和目录名
					String pathname=listFile[i].getAbsolutePath();
					String temname=listFile[i].getName();
					//判断是否相等
					if(temname.equals(fileName)){
						ta.append("找到文件夹:"+temname+"\n"+"文件路径:"+pathname+"\n");
						this.filecount++;
					}
					// 进行递归调用
					count += FileCheck(pathname);
				}
				//如果是文件
				if(listFile[i].isFile()){
					//得到文件名
					String filename=listFile[i].getName();
					//判断是否相等
					count++;
					if(filename.equals(fileName)){
						ta.append("找到文件:"+filename+"\n"+"文件路径:"+listFile[i].getAbsolutePath()+"\n");
						String pathname=listFile[i].getAbsolutePath();
						//调用显示文件的方法
						String result = inputFileOne(pathname);
						//输出文件的内容
						ta.append(result);
						this.filecount++;
					}
					
				}
			
			}
		}else{
			javax.swing.JOptionPane.showMessageDialog(null,"文件不存在");
		}
		return count;
	}

	private String inputFileOne(String pathname) throws Exception {
		//创建一个InputStream的对象
		InputStream is = new FileInputStream(pathname);
		//新建一个缓冲流输入对象
		BufferedInputStream bis=new BufferedInputStream(is);
		//得到文件的长度
		int length = is.available();
		//创建一个byte数组
		byte [] content = new byte[length];
		
		//定义一个变量,用来保存读取出来的字节数据
		int i = 0;
		//读取文件
		bis.read(content);
		//把文件输入流对象给关闭
		is.close();
		bis.close();
		//将byte数组转换为字符串
		String str = new String(content);
		return str;
	}


	

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前天正好要找一个本地文件, 就用java实现了, 全盘的本地文件搜索功能. 代码不依赖其它第三方jar, 连日志都用system.out了. 初学者可以了解下. 主程序: LocalFileSearcher.java LocalFileSearcher searcher = new LocalFileSearcher(); searcher.doSearch("迅雷"); log如下: Start search keyword: 迅雷 Start search all drivers! success: E:\迅雷下载 success: F:\迅雷下载 success: C:\Users\Administrator\Desktop\迅雷.lnk success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Libraries\迅雷下载.library-ms success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷影音.lnk success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷影音.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\卸载迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷.lnk Search costs : 3861(ms) File searched : 154848 Folder searched: 31463 Success match : 16 后续再更新完善
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值