首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java基础之文件搜寻工具

2014-01-08 
java基础之文件搜索工具这是本人以前学习java时做的一个文件搜索的东东,一方面对File进行一些了解,另一方

java基础之文件搜索工具

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

一,首先对文件进行一些介绍(可以跳过,直接看后面的代码)
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 包含的方法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,源代码已经上传。。

热点排行