java基础之文件搜寻工具
java基础之文件搜索工具这是本人以前学习java时做的一个文件搜索的东东,一方面对File进行一些了解,另一方
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 包含的方法Java代码
- public?void?UI(){??
- ????//设置界面??
- ????this.setTitle("FileSearch");??
- ????this.setSize(400,400);??
- ????this.setLocation(400,100);??
- ????this.setLayout(new?FlowLayout(FlowLayout.LEFT));??
- ????this.setDefaultCloseOperation(3);??
- ????//文件输入框??
- ????jt=new?JTextField(10);??
- ????jt.setPreferredSize(new?Dimension(126,30));??
- ????this.add(jt);??
- ????//搜索按钮??
- ????jb=new?JButton("search");??
- ????jb.addActionListener(this);??
- ????this.add(jb);??
- ????//标签1??
- ????JLabel?j2=new?JLabel("文件格式");??
- ????this.add(j2);??
- ????//第二个文本框??
- ?????jt1=new?JTextField(5);??
- ????jt1.setPreferredSize(new?Dimension(22,30));??
- ????jt1.setFont(new?Font("黑体",Font.BOLD,14));??
- ????this.add(jt1);??
- ????//标签2??
- ????JLabel?j1=new?JLabel("请选择搜索范围");???
- ????this.add(j1);??
- ????//添加按钮??
- ????this.creatButton();??
- ??
- ????//添加滑动框??
- ????this.creatText();??
- ????//设置窗口大小不能改变??
- ????this.setResizable(false);??
- ????//设置窗体可见??
- ????this.setVisible(true);??
?creatButton();是创造按钮函数。
Java代码
- //创建按钮的方法??
- public?void?creatButton(){??
- ????bu=new?ButtonGroup();??
- ????//有多少磁盘就创建多少按钮??
- ????File[]?f=File.listRoots();??
- ????for(int?i=0;i<f.length;i++){??
- ????????JRadioButton?j=new?JRadioButton();??
- ????????j.addActionListener(this);??
- ????????JLabel?jl=new?JLabel(f[i].getPath());??
- ????????j.setActionCommand(f[i].getPath());??
- ????????bu.add(j);??
- ????????this.add(jl);??
- ????????this.add(j);??
- ????}??
?File[] f=File.listRoots();是获取你的电脑所有的磁盘
creatText()是
?
Java代码
- public?void?creatText(){??
- ????????//创造JTextArea??
- ????????jte=new?JTextArea(15,30);??
- ????????jte.setLineWrap(true);??
- ????????//创造JScrollPane??
- ????????JScrollPane?jd=new?JScrollPane(jte);??
- ????????jte.setLayout(new?GridLayout(1,1));??
- ????????this.add(jd);??
- ????}??
?
创造下面那个显示搜索结果的东东
/**********************************************************************************************************************************/
下面就是,添加监听,与事件触发后的方法的介绍。
?
?
Java代码
- }??
- ????//监听事件的方法??
- ????public?void?actionPerformed(ActionEvent?e)?{??
- ????????//列出磁盘??
- ????????f1=File.listRoots();??
- ????????//如果按下search按钮调用的方法??
- ?????????if(e.getActionCommand().equals("search")){??
- ????????//全盘搜索??
- ?????????????//判断是否输入内容??
- ?????????????if(jt.getText().equals("")){??
- ?????????????????JOptionPane.showMessageDialog(this,"请输入搜索内容");??
- ?????????????}//判断是否选择搜索范围??
- ?????????????else?if(bu.getSelection()==null){??
- ?????????????????JOptionPane.showMessageDialog(this,"请选择搜索范围");??
- ?????????????}??
- ?????????????else?if(bu.getSelection().getActionCommand().equals("ALL")){??
- ????????????System.out.println("全盘搜索");??
- ????????????for(int?j=0;j<f1.length;j++){??
- ????????????????String?st=f1[j].getPath();??
- ????????????????System.out.print(st);??
- ????????????????SearchThread?ss=new?SearchThread(this,st);??
- ????????????????ss.start();??
- ????????????}??
- ????????}//搜索指定的盘??
- ????else?{??
- ????????SearchThread?ss=new?SearchThread(this,bu.getSelection().getActionCommand());??
- ????????ss.start();??
- ????????}}??
- ????}??
其中的搜索用线程处理,但是又得防止线程过多,会崩溃
Java代码
- public?class?SearchThread?extends?Thread{??
- ????public?Jm?j;??
- ????public?String?s;??
- ????public?SearchThread(Jm?j,String?s){??
- ????????this.j=j;??
- ????????this.s=s;??
- ????}??
- ????public?void?run(){??
- ????????//System.out.println("-------->>>"+s);??
- ????????j.searchFile(s);??
- ????????//System.out.println("已经搜索完"+s);??
- ????}??
- ??
- }??
?searchFile()
Java代码
- public?void?searchFile(String?path){??
- ????File?f=new?File(path);??
- ????File[]?fi=f.listFiles();??
- ????if(fi!=null){??
- ????for(int?i=0;i<fi.length;i++){??
- ????????//如果是文件??
- ????????if(fi[i].isFile()){??
- ????????String?s=fi[i].getName();??
- ????????????if(s.contains(jt.getText())){??
- ????????????????//获取文件格式名前的文件名??
- ????????????????int?ii=s.lastIndexOf(".");??
- ????????????????String?str=s.substring(ii+1);??
- ????????????????//如果没有输出文件格式或者搜索到的文件格式符合输入的格式??
- ????????????????if(jt1.getText().equals("")||jt1.getText().equals(str)){??
- ?????????????????jte.append(fi[i].getAbsolutePath()+"\r\n");??
- ????????????}??
- ????????????}//如果是目录,就递归??
- ????????}else?if(fi[i].isDirectory()){??
- ????????????String?s=fi[i].getName();??
- ????????????if(s.contains(jt.getText())){??
- ????????????????jte.append(fi[i].getAbsolutePath()+"\r\n");??
- ????????????}??
- ????????????//开启线程去处理每个文件??
- ????????????if(fi.length>25){??
- ????????????SearchThread?se=new?SearchThread(this,fi[i].getAbsolutePath());??
- ????????????se.start();}??
- ????????????else{??
- ????????????????searchFile(fi[i].getAbsolutePath());??
- ????????????}??
- ????????????????????}??
- ????}??
- }??
- ????}??
- ?上面是递归??
。。。主要思想很简单,就是遍历一个文件夹,如果其中有文件夹,在执行同样的方法,如果是文件,就比较你的文件名是否跟包含搜索的输入的字符,是的话就打印出来。
有任何疑问可以问我或者留言? 50586022,源代码已经上传。。