`
arlwei
  • 浏览: 5901 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

文件搜索器小结

阅读更多

    做一个文件搜索器,要考虑查看所有的文件,由于工作量大,用递归不失为一种好的方式。递归是本程序的算法核心。剩下的都是做界面和大概的架构问题了。由于我的Swing并不是学得很好,所以大量的时间被花在了怎么给JComboBox的item进行addItemListener的实现去了。最后,还是没实现自己的想法。比较遗憾吧。后来选择的是将JComboBoxJFileChooser分开,用了以前的知识实现了。。

 

下面是添加textArea的代码

                //添加文本区到右边的面板
		javax.swing.JTextArea textArea = new javax.swing.JTextArea( 35, 35);
		//添加自动换行
		textArea.setLineWrap(true);
		//添加滚动条
		javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(textArea);
		//垂直滚动条需要时出现
		scrollPane.setHorizontalScrollBarPolicy( javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		//添加textField到output面板
		output.add(scrollPane);
   

textArea容易出错的地方是这段代码的最后一句,要记住要把滚动条加载到面板上,而不是加载到文本区textArea上

 

 

监听器部分中的actionPerformed

	public void actionPerformed(java.awt.event.ActionEvent e) {
		if (e.getActionCommand().equals("搜索")) {
			// 获取text中的内容并传递给字符串
			content = text.getText();
			int count = printDir(item);
			textArea.append(item + "目录下共找到文件个数是: " + count + '\n');
		}
		else if(e.getActionCommand().equals("目录")){
			//文件选择器
			 JFileChooser fileChooser = new JFileChooser();
			//设置选择模式为文件和目录都可以选择
			 fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
			//打开对话框
			 int option = fileChooser.showOpenDialog(searcher);
			 //如果用户选择取消按钮或者离开了对话框
			 if(option==JFileChooser.CANCEL_OPTION) return ;
			 //得到绝对路径
			 item = fileChooser.getSelectedFile().getAbsoluteFile();
		}
		else{
			//获得事件
			javax.swing.JComboBox cb = (javax.swing.JComboBox) e.getSource();
			//获得选中的磁盘
			item = (File) cb.getSelectedItem();
		}
	}
 

第一次用JFileChooser,说容易也容易,说难也难吧。要记住要考虑用户不使用对话框的情况,否则会有异常。这段还学习到的是获得事件源,并且将其强制转型为JComBox类型,从而能够使用getSelectedItem这一方法。由于我的搜索方法的参数是File类型的,所以又要强制转换。

 

递归部分基本上是按书上的思想打的,没什么创意

	public int printDir(File dirFile) {
		//计数
		int fileCount = 0;
		//列出这个目录下的文件
		File[] subFile = dirFile.listFiles();
		if (null == subFile || subFile.length == 0) {
			return 0;
		}
		for (int i = 0; i < subFile.length; i++) {
			if (subFile[i].isDirectory()) {
				// 还是目录,调用同样的方法进行计算
				fileCount += printDir(subFile[i]);
			}
			if (subFile[i].isFile())
				if (subFile[i].getName().contains(content)) {
					fileCount++;
					textArea.append(subFile[i].getAbsolutePath() + '\n');
				}
		}
		return fileCount;
	}

 

这里用到了JTextArea中的append方法,将内容输出到textArea上。同时,还用到了contains方法,借此来测试是不是包含要求的字符串。

 

这一个小东西学到的还是蛮多的吧。一方面让我对Swing界面有了更深的了解,另一方面也对java中的递归有了初步的认识。这个程序不完美的地方还有很多。以后会综合其他的功能慢慢改进吧。

 

 

分享到:
评论

相关推荐

    linux命令行小结

    linux(redhat5)错误处理小结 1. 开启:/sbin/service iptables start 关闭: /sbin/service iptables stop --Linux命令行关闭防火墙 即时生效,重启后失效 2./etc/init.d/iptables stop chkconfig --level 35 ...

    自己动手写搜索引擎(罗刚著).doc

    1.4 本章小结 4 第2章 遍历搜索引擎技术 5 2.1 30分钟实现的搜索引擎 5 2.1.1 准备工作环境(10分钟) 5 2.1.2 编写代码(15分钟) 6 2.1.3 发布运行(5分钟) 9 2.2 搜索引擎基本技术 14 2.2.1 网络蜘蛛 14 2.2.2 ...

    中文简体压缩软件RAR 6.0

    在 c:\*.rar 压缩文件中的 *.txt 文件执行区分大小写的 "first level" 字符串的搜索 2) rar ih=f0e0aeaeab2d83e3a9 -r e:\text 在 e:\text 目录下的 rar 压缩文件中搜索十六进制字符串 f0 e0 ae ae ab 2d ...

    JAVA WEB典型模块与项目实战大全

    1.5 小结  第2章 myedipse开发工具对各种框架的支持  2.1 使用jsp的两种模式  2.2 struts框架的实现  2.3 hibernate框架的实现  2.4 jpa框架的实现  2.5 spring框架的实现  2.6 jsf框架的实现  2.7...

    rar压缩软件.rar

    在 c:\*.rar 压缩文件中的 *.txt 文件执行区分大小写的 "first level" 字符串的搜索 2) rar ih=f0e0aeaeab2d83e3a9 -r e:\text 在 e:\text 目录下的 rar 压缩文件中搜索十六进制字符串 f0 e0 ae ae ab 2d 83 ...

    LINUX 24学时教程

    1.10 课时小结 13 1.11 专家答疑 13 1.12 练习题 13 第2学时 安装Linux操作系统 14 2.1 开始安装 14 2.2 完成Linux操作系统安装过程 20 2.2.1 登录到Linux操作系统 22 2.2.2 重新启动和关机 24 2.3 课时小结 25 2.4 ...

    visio教程PDF

    1.7 小结 第2章 Visio 2000工程环境 2.1 操作Welcome to Visio 2000窗口 2.1.1 难备新的绘图 2.1.2 准备打开一个已经存在的文件 2.2 基本下拉菜单 2.2.1 File下拉菜单 2.2.2 Tools下拉菜单 ...

    Visio 2000 技术大全

    1.7 小结 第2章 Visio 2000工程环境 2.1 操作Welcome to Visio 2000窗口 2.1.1 难备新的绘图 2.1.2 准备打开一个已经存在的文件 2.2 基本下拉菜单 2.2.1 File下拉菜单 2.2.2 Tools下拉...

    精通ANDROID 3(中文版)1/2

    1.8 小结  第2章 设置开发环境  2.1 设置环境  2.1.1 下载JDK 6  2.1.2 下载Eclipse 3.6  2.1.3 下载Android SDK  2.1.4 命令行窗口  2.1.5 安装ADT  2.2 了解基本组件  2.2.1 View  2.2.2 ...

    精通Android 3 (中文版)2/2

    1.8 小结  第2章 设置开发环境  2.1 设置环境  2.1.1 下载JDK 6  2.1.2 下载Eclipse 3.6  2.1.3 下载Android SDK  2.1.4 命令行窗口  2.1.5 安装ADT  2.2 了解基本组件  2.2.1 View  2.2.2 ...

    Fuzzing_模糊测试--强制性安全漏洞发掘

    目录 作者序 译者序 前 言 第一部分 第1章 安全漏洞发掘方法学 1.1 白盒测试 1.1.1 源代码评审 1.1.2 工具和自动化 1.1.3 优点和缺点 1.2 黑盒测试 ...1.2.2 自动测试或模糊测试 ...1.4 小结 ...26.4 小结

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    1.4 小结 20 第2章 数据类型 21 2.1 基本数值类型 21 2.1.1 整数类型 22 2.1.2 浮点类型 23 2.1.3 decimal类型 23 2.1.4 字面值 24 2.2 更多基本类型 27 2.2.1 布尔类型 27 2.2.2...

    C# 源码 C#2008经典案例

    本章小结 第2章 Visual C# 2008与图形图像 案例1 动态绘制直线和曲线 案例2 动态绘制验证码 案例3 椭圓及椭圆弧的绘制 案例4 移动鼠标复制坐标区域图像 案例5 动态获取当前程序的图标 案例6 动态获取系统图标 案例...

    C#设计经典案例设计与实现

    第1章 Visual C#2008与窗体界面 案例1 飘动动画窗体 案例2 透明动画窗体 案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 ...本章小结

    Visual+C#+2008程序设计经典案例设计与实现.rar

    Visual+C#+2008程序设计经典案例设计与实现 第1章 Visual C#2008与窗体界面 案例1 飘动动画窗体 案例2 透明动画窗体 案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 ...本章小结

    C++ STL 开发技术导引(第6章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

    C++ STL开发技术导引(第5章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

    C++ STL开发技术导引(第3章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

Global site tag (gtag.js) - Google Analytics