java基础之文件搜索工具

这是本人以前学习java时做的一个文件搜索的东东,一方面对File进行一些了解,另一方面对递归一些了解。。。先上图

一,首先对文件进行一些介绍(可以跳过,直接看后面的代码)
File f=new File("路径");
常用方法
f.creatNewFile();//创造一个新的空文件
f.delete()//删除掉
f.getName();//得到名字
f.getAbsoultPath();//得到完全路径
f.isDirector();//判断是不是目录
f.idFile();//判断是不是文件
f.length();//返回长度
f.list();/返回一个字符串数组,返回此此目录下目录和文件
f.listFiles();//返回一个字符串数组,返回此此目录下的文件
f.listRoots();/列出可用的文件系统根
f.toSring();/返回此路径名的字符串
f.mkdir();/创建一级目录
f.mkdirs();//创建多级目录;
文件写入读写的两个基础大类
输入流 FileInputStream 包含的方法 
FileInputStream fi=new FileInputStream(File file);//获取文件file上的输入流
in.available();//返回file中可读取的字节byte数
in.read();//读取文件,以byte为单位
in.close();//关闭输入
然后可以用各种流包装,
如:BufferedInputStream
可以 BufferedInputStream(in);
将其封装 这样可以加快读取数据
或者 DataInputStream。可以读取其他非byte数据类型
FileOutputStream和上面差不多

一,首先还是从界面说起

一个主界面JFrame  几个JRidobutton  下面一个是JScrollPane的显示结果的框

Java代码    收藏代码
  1. public void UI(){  
  2.     //设置界面  
  3.     this.setTitle("FileSearch");  
  4.     this.setSize(400,400);  
  5.     this.setLocation(400,100);  
  6.     this.setLayout(new FlowLayout(FlowLayout.LEFT));  
  7.     this.setDefaultCloseOperation(3);  
  8.     //文件输入框  
  9.     jt=new JTextField(10);  
  10.     jt.setPreferredSize(new Dimension(126,30));  
  11.     this.add(jt);  
  12.     //搜索按钮  
  13.     jb=new JButton("search");  
  14.     jb.addActionListener(this);  
  15.     this.add(jb);  
  16.     //标签1  
  17.     JLabel j2=new JLabel("文件格式");  
  18.     this.add(j2);  
  19.     //第二个文本框  
  20.      jt1=new JTextField(5);  
  21.     jt1.setPreferredSize(new Dimension(22,30));  
  22.     jt1.setFont(new Font("黑体",Font.BOLD,14));  
  23.     this.add(jt1);  
  24.     //标签2  
  25.     JLabel j1=new JLabel("请选择搜索范围");   
  26.     this.add(j1);  
  27.     //添加按钮  
  28.     this.creatButton();  
  29.   
  30.     //添加滑动框  
  31.     this.creatText();  
  32.     //设置窗口大小不能改变  
  33.     this.setResizable(false);  
  34.     //设置窗体可见  
  35.     this.setVisible(true);  

 creatButton();是创造按钮函数。

Java代码    收藏代码
  1. //创建按钮的方法  
  2. public void creatButton(){  
  3.     bu=new ButtonGroup();  
  4.     //有多少磁盘就创建多少按钮  
  5.     File[] f=File.listRoots();  
  6.     for(int i=0;i<f.length;i++){  
  7.         JRadioButton j=new JRadioButton();  
  8.         j.addActionListener(this);  
  9.         JLabel jl=new JLabel(f[i].getPath());  
  10.         j.setActionCommand(f[i].getPath());  
  11.         bu.add(j);  
  12.         this.add(jl);  
  13.         this.add(j);  
  14.     }  

 File[] f=File.listRoots();是获取你的电脑所有的磁盘

creatText()是

 

Java代码    收藏代码
  1. public void creatText(){  
  2.         //创造JTextArea  
  3.         jte=new JTextArea(15,30);  
  4.         jte.setLineWrap(true);  
  5.         //创造JScrollPane  
  6.         JScrollPane jd=new JScrollPane(jte);  
  7.         jte.setLayout(new GridLayout(1,1));  
  8.         this.add(jd);  
  9.     }  

 

创造下面那个显示搜索结果的东东

/**********************************************************************************************************************************/

下面就是,添加监听,与事件触发后的方法的介绍。

 

 

Java代码    收藏代码
  1. }  
  2.     //监听事件的方法  
  3.     public void actionPerformed(ActionEvent e) {  
  4.         //列出磁盘  
  5.         f1=File.listRoots();  
  6.         //如果按下search按钮调用的方法  
  7.          if(e.getActionCommand().equals("search")){  
  8.         //全盘搜索  
  9.              //判断是否输入内容  
  10.              if(jt.getText().equals("")){  
  11.                  JOptionPane.showMessageDialog(this,"请输入搜索内容");  
  12.              }//判断是否选择搜索范围  
  13.              else if(bu.getSelection()==null){  
  14.                  JOptionPane.showMessageDialog(this,"请选择搜索范围");  
  15.              }  
  16.              else if(bu.getSelection().getActionCommand().equals("ALL")){  
  17.             System.out.println("全盘搜索");  
  18.             for(int j=0;j<f1.length;j++){  
  19.                 String st=f1[j].getPath();  
  20.                 System.out.print(st);  
  21.                 SearchThread ss=new SearchThread(this,st);  
  22.                 ss.start();  
  23.             }  
  24.         }//搜索指定的盘  
  25.     else {  
  26.         SearchThread ss=new SearchThread(this,bu.getSelection().getActionCommand());  
  27.         ss.start();  
  28.         }}  
  29.     }  

其中的搜索用线程处理,但是又得防止线程过多,会崩溃

Java代码    收藏代码
  1. public class SearchThread extends Thread{  
  2.     public Jm j;  
  3.     public String s;  
  4.     public SearchThread(Jm j,String s){  
  5.         this.j=j;  
  6.         this.s=s;  
  7.     }  
  8.     public void run(){  
  9.         //System.out.println("-------->>>"+s);  
  10.         j.searchFile(s);  
  11.         //System.out.println("已经搜索完"+s);  
  12.     }  
  13.   
  14. }  

 searchFile()

Java代码    收藏代码
  1. public void searchFile(String path){  
  2.     File f=new File(path);  
  3.     File[] fi=f.listFiles();  
  4.     if(fi!=null){  
  5.     for(int i=0;i<fi.length;i++){  
  6.         //如果是文件  
  7.         if(fi[i].isFile()){  
  8.         String s=fi[i].getName();  
  9.             if(s.contains(jt.getText())){  
  10.                 //获取文件格式名前的文件名  
  11.                 int ii=s.lastIndexOf(".");  
  12.                 String str=s.substring(ii+1);  
  13.                 //如果没有输出文件格式或者搜索到的文件格式符合输入的格式  
  14.                 if(jt1.getText().equals("")||jt1.getText().equals(str)){  
  15.                  jte.append(fi[i].getAbsolutePath()+"\r\n");  
  16.             }  
  17.             }//如果是目录,就递归  
  18.         }else if(fi[i].isDirectory()){  
  19.             String s=fi[i].getName();  
  20.             if(s.contains(jt.getText())){  
  21.                 jte.append(fi[i].getAbsolutePath()+"\r\n");  
  22.             }  
  23.             //开启线程去处理每个文件  
  24.             if(fi.length>25){  
  25.             SearchThread se=new SearchThread(this,fi[i].getAbsolutePath());  
  26.             se.start();}  
  27.             else{  
  28.                 searchFile(fi[i].getAbsolutePath());  
  29.             }  
  30.                     }  
  31.     }  
  32. }  
  33.     }  
  34.  上面是递归  

。。。主要思想很简单,就是遍历一个文件夹,如果其中有文件夹,在执行同样的方法,如果是文件,就比较你的文件名是否跟包含搜索的输入的字符,是的话就打印出来。

有任何疑问可以问我或者留言  50586022,源代码已经上传。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值