`
XY1991
  • 浏览: 36153 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

java文件搜索器(初级)

阅读更多

    最近,学习了java的文件的一些基本操作,利用文件的基本知识做了一个小项目——文件搜索器

这个文件搜索器我默认是在D盘下面搜索,它一旦开始搜索,就不能停下来,这个会在学完线程之后进行完善,并加上时间条。

 

      文件,即File,位于java.io包下。文件到底指的是什么,在这里先声明一下:

1.文件的全名是包含文件的路径和扩展名的,但我们单独讲一个文件名是,是不包含路径但包含扩展名的;

2.在同一目录(就是同一文件夹)下,不会存在同名的目录和文件,如果强行为一个文件改成目录下已有的名字,系统会报错,终止重命名;

3.文件的路径包含相对目录和绝对目录:

  
    相对目录:不以路径分隔符开头的文件路径,需要使用取自其他路径名的信息来解析,默认情况下,java.io包中的类
                   总是根据当前用户的目录来解析相对路径名

    绝对目录:指以根目录开头的路径,是完整的路径名,不需要其他信息就可以定义文件的位置

    当前目录:指相对于程序运行时的目录算起的相对路径

 

       关于文件的扩展名,我曾经办过一件很搞笑的事情,当时虽然知道不同的文件会有不同的扩展名,但是仅此而已,我的手机只支持mp3格式的,但是有一个音乐文件只有wma的,我就把后面的扩展名给改了,放到手机里,自己觉得还挺得意的,结果还是不能识别,才知道文件格式绝对不仅仅是扩展名不同这么简单,这次学习,让我对文件有个更深刻的理解.

 

我们使用File时经常用到的有以下一些方法
       1.boolean exists()  测试此抽象路径名表示的文件或目录是否存在。
       2.String getAbsolutePath()  返回此抽象路径名的绝对路径名字符串。
       3.String getName() 返回由此抽象路径名表示的文件或目录的名称。
       4.boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
       5.boolean isFile()   测试此抽象路径名表示的文件是否是一个标准文件。
       6.long length()   返回由此抽象路径名表示的文件的长度。 
       7.static File[] listRoots() 列出可用的文件系统根。 
       
        以下是文件搜索器的具体实现:

package cn.netjava.xySearchFile;

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
 

 /**
  * 文件搜索器
  *
  */

public class FileShowUI extends javax.swing.JFrame{
	
	//定义一个面板属性
	private JPanel pl;
	//定义一个画布对象
	private java.awt.Graphics g;
	//创建一个SearchFile类的对象
	private  SearchFile sf;
	//创建一个保存路径的集合
	private  java.util.ArrayList<String> arrayList = new java.util.ArrayList<String>();
	//定义文件名字
	private  String name;
	//定义一个文本框组件
	private  JTextField jtf;
	
	/**
	 *主函数
	 * @param args
	 */
	public static void main(String[] args) {
		//创建主函数的对象
		FileShowUI fui = new FileShowUI();
		//调用显示界面的方法
		fui.showUI();
	}
	

	/**
	 * 文件搜索器的显示界面
	 */
	public void showUI(){
		//设定窗口的名字
		this.setTitle("我的文件搜索器");
		//设置显示窗口的大小
		this.setSize(600,500);
		//设定窗口居中显示
		this.setLocationRelativeTo(null);
		//将窗口固定大小
		this.setResizable(false);
		//不使用布局管理器
		this.setLayout(null);
		
		   
		//创建面板对象
		pl = new javax.swing.JPanel();
		//设置面板大小和显示位置
		pl.setBounds(0, 0, 600, 500);
		//设置面板的颜色
		pl.setBackground(java.awt.Color.LIGHT_GRAY);
		//将面板添加到界面上
		final JTextArea jta = new JTextArea(24, 48);
		//在面板上加个长度为10的输入框
		jtf=new JTextField(15);	
		//为面板添加按钮
		javax.swing.JButton search = new javax.swing.JButton("查找");
		javax.swing.JButton start = new javax.swing.JButton("开始搜索");
		javax.swing.JButton finish = new javax.swing.JButton("结束搜索");
		
		
		//将按钮添加到面板上
		pl.add(search);
		pl.add(jtf);
		pl.add(start);
		pl.add(finish);
		pl.add(jta);
		//将面板添加到画布上
		this.add(pl);
		//边框布局管理
		this.add(pl, BorderLayout.NORTH);   
        this.add(jta, BorderLayout.CENTER); 
 
		//滚动面板
		JScrollPane pane = new JScrollPane(jta);
		//设置面板的大小
		pane.setSize(new Dimension(550,400));
		pl.add(pane);

		
		sf = new SearchFile(arrayList);
		//给按钮添加监听器“匿名内部类”
		java.awt.event.ActionListener al=  new java.awt.event.ActionListener(){
        	public void actionPerformed(ActionEvent e) {
        		//获取用户输入要查找文件的名字
        		name = jtf.getText();
        		//默认为在D盘搜索
				int s = sf.search("D:\\",name);
				if(arrayList == null && arrayList.size()==0){
					jta.append("您所查找的文件不存在!\n");
					System.out.println("您所查找的文件不存在!");
				}else{
					for(int i=0; i < arrayList.size();i++){
						jta.append("文件:" + arrayList.get(i) + "\n");
					} 
				}
				jta.append("您所查找的文件总数为:"+ s);
				System.out.println("您所查找的文件总数为:"+ s);
        	}
       };
       start.addActionListener(al);

		
		//设置以上设置可见
		this.setVisible(true);
		
		//得到窗体上的画布类
		g = pl.getGraphics();
		
	}
	 
}

 

 

package cn.netjava.xySearchFile;
import java.io.File;



/**
 * 文件搜索器
 * @param args
 */
public class SearchFile  {
	//定义一个保存文件路径的队列
	private  java.util.ArrayList<String> arrayList = new  java.util.ArrayList<String>();
	
	//自定义构造函数
	public SearchFile(java.util.ArrayList<String>  arrayList){
		this.arrayList = arrayList;
		
	}

	/**
	 * 文件搜索的方法
	 */
	public int search(String fileName, String name){
		//把计数器初始化为0
		int count = 0;
		//如果没找到,
		if(name == null){
			return 0;
		}
		//创建一个文件类的对象
		File file = new File(fileName);
		//定义一个file数组,获取所有的文件目录
		File[] fileList = file.listFiles();
		//先判断数组是否为空
		if(null == fileList && fileList.length == 0){
			System.out.println("文件目录为空,请在其他文件中查找。");
			return 0;
		}else{
			for(int i=0; i< fileList.length; i++){
				//如果是文件
				if(fileList[i].isFile()){
					//获取文件的路径
					String filePath = fileList[i].getAbsolutePath();
					//如果文件与查找的文件名相同,就把路径添加到队列中
					if (filePath.indexOf(name) >= 0) {   
                        count++;   
                        arrayList.add(filePath);   
                    }   
				}
				//如果是目录
				if(fileList[i].isDirectory()){
					//获取目录的路径
					String path = fileList[i].getAbsolutePath();
					count += search(path,name);
				}
				 
			}
		}
		return count;
	}

	
	
	
}

 

 文件的界面见附件。

  • 大小: 16 KB
  • 大小: 56.5 KB
2
0
分享到:
评论

相关推荐

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

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

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

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

    java源码包4

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

    java源码包3

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

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

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

    java源码包2

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

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

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

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

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

    初级java笔试题-resources:资源

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

    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语言的科学与艺术(国外计算机科学经典教材)

    自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在已经成为初级计算课程斯坦福大学的标准语言。Java语言可以让学生编写高度交互式程序,这充分激发了他们的学习兴趣。但Java语言很复杂,老师和...

    jsr80 java 访问 usb

    搜索 developerWorks 打印本页面用电子邮件发送本页面新浪微博人人网腾讯微博搜狐微博网易微博DiggFacebookTwitterDeliciousLinked In developerWorks 中国技术主题Java technology文档库 在 Java 应用程序中访问 ...

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

    4.2 fckeditor在线文本编辑器初级应用  4.3 fckeditor在线文本编辑器常用配置  4.4 fckeditor在线文本编辑器高级应用  4.5 小结  第5章 验证模块(jsp+servlet+jsvaildation)  5.1 表单基础  5.2 客户端...

    初级java笔试题-awesome-stars:我的GitHub星星的精选列表!

    初级java笔试题真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 自动热键 —— C - 官方 QEMU 镜像。 请参阅如何向 QEMU 提交更改。 拉取请求被忽略。 请仅使用来自 QEMU 网站的发布 tarball。 - 跨平台异步 I/O...

    初级java笔试题-awesome-stars:我自己的很棒的清单!

    初级java笔试题真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 阿帕奇会议 - Aplicación web basada en angular 阿杜诺 - Dtto Robot v1.0,模块化自重构机器人 集会 - 每种编程语言中的 Hello world。 感谢...

    福优林@Qt5小白变大牛初级篇word---第4章.pdf

    其中,Java风格的迭代器更容易使用,特别是对于Java工作人员来说,它提供了高层次的函数;然而,STL风格的迭代器会更高效,并且可以和Qt和STL的通用算法结合使用。 Qt中的容器和STL中的类似,也分为序列式容器和关联...

    Hacking Vim

    下面总结一下我从这本书和其它地方学到的一些常见的设置和技巧(我自认为是中高级的,可是有些读者可能认为某些部分是初级的)。 2.1全局替换 %s/old/new/g 2.2多文件替换 多文件替换,比如要替换所有.c文件中a_...

    IBM WebSphere Portal门户开发笔记01

    一、初级入门:Portal的主题与皮肤开发: 153 二、中级开发:如何更换Portal系统的logo图标; 155 三、中级进阶:开发个性化的Portal主题 157 四、高级探索:开发自适应分辨率的主题与皮肤 160 五、高手过招:更改...

Global site tag (gtag.js) - Google Analytics