`
tan-wanhui
  • 浏览: 18823 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

初学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;
	}


	

}
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...

    Java初学者入门教学

    8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 8.9 练习 第9章 违例差错控制 9.1 基本违例 9.1.1 违例自变量 9.2 违例的捕获 9.2.1 try块 9.2.2 违例控制器 9.2.3 违例规范 9.2.4 捕获所有违例 9.2.5 重新“掷”出违例...

    完全免费的Java/jsp开发编辑工具FirstJava2

    对初学者来说,使用方法过于复杂,如果你编译200个java文件,编译速度太慢,需要好长时间. Eclipse和Jbuild编辑辅助方式,显示的内容太多了,眼都看花了. 当你使用FirstJava2你会发现,它速度很快,功能简单,管用,反应敏捷,...

    Java语言的科学与艺术 斯坦福大学经典教材

    11.11 编程练习 第12章 搜索与排序 12.1 搜索 12.2 排序 12.3 评估算法效率 12.4 使用数据文件 12.5 小结 12.6 复习题 12.7 编程练习 第13章 数组与ArrayList类 13.1 ArrayList类回顾 13.2 HashMap类 13.3 Java集合...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     本书非常适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目 录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 2 1.1 Java环境 3 实例001 下载JDK开发...

    Java语言的科学与艺术(国外计算机科学经典教材)

     在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing ...

    初级java笔试题-resources:资源

    初级java笔试题编程资源 一般的 项目理念 6515 GA 中使用 Lark 或 JS 解析器的 DP 问题的伪代码运行器/转译器到 python? 发明一个朗名。 调用 pd 补丁的脚本,通过 puppeteer 或其他文件共享服务生成艺术品并发布到...

    AVL树的完整实现(含比较器,Java语言描述)

    AVL树是平衡查找二叉树,不仅能避免二叉搜索树出现斜树的状况,更是能保持比较标准的O(log2N),但AVL树可能需要很多次的各种调整: 左儿子单旋转 左儿子双旋转 右儿子单旋转 右儿子双旋转 最终使得AVL树维持平衡,...

Global site tag (gtag.js) - Google Analytics