import javax.activation.MimetypesFileTypeMap;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* Created by me on 2017/4/21.
*/
public class Fileselect {
private static int level=0;
private String type;
//设置构造函数 传递参数
public Fileselect(String type) {
this.type=type;
}
//对文件进行遍历
public void IteratorDir(File file){
if(file!=null){
//设置递归出口
if(file.isFile()||file.listFiles().length==0){
return;
}
else {
File[] files=file.listFiles();
files=sort(files);
for(File file1:files){
StringBuilder stringBuilder=new StringBuilder();
if(file1.isFile()){
stringBuilder.append(getTab(level));
stringBuilder.append(file1.getName());
}
else {
stringBuilder.append(getTab(level));
stringBuilder.append(file1.getName());
stringBuilder.append("\\");
}
//假如是文件夹 进入目录进行遍历
if(file1.isDirectory()){
level++; //层级加一
IteratorDir(file1); //递归调用遍历
level--;//返回上一级目录 继续打印输出
}
System.out.println(stringBuilder.toString());
}
}
}
else {
System.out.println("文件为空");
}
}
//对File类型的数组进行先目录后文件排序
private File[] sort(File [] files){
List<File> fList=new ArrayList<File>();
for(File file:files){
if(file.isDirectory()){
fList.add(file);
}
}
for(File file:files){
if(file.isFile()){
fList.add(file);
}
}
//把集合中的元素转换为指定大小和指定数据类型的数组
return fList.toArray(new File[fList.size()]);
}
//根据层级数 来的得到制表符个数
private String getTab(int level){
StringBuilder stringBuilder=new StringBuilder();
for (int i=0;i<level;i++){
stringBuilder.append("\t");
}
return stringBuilder.toString();
}
public void filematch(File file){
if(file!=null){
//设置递归出口
if(file.isFile()||file.listFiles().length==0){
return;
}
else {
File[] files=file.listFiles();
files=sort(files);
for(File file1:files){
StringBuilder stringBuilder=new StringBuilder();
if(file1.isFile()){
if (new File(file1.getPath()).getName().endsWith(type)==true) {
stringBuilder.append(file1.getName());
stringBuilder.append(" ");
stringBuilder.append(file1.getPath());
stringBuilder.append(" ");
stringBuilder.append(file1.length());
}
}
//假如是文件夹 进入目录进行遍历
if(file1.isDirectory()){
filematch(file1); //递归调用遍历
}
System.out.println(stringBuilder.toString());
}
}
}
else {
System.out.println("文件为空");
}
}
}
package Filetraverse;
/**
* Created by me on 2017/4/21.
*/
public class Test {
public static void main(String[] args) {
new UI("欢迎使用----qhz");
}
}
package Filetraverse;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
/**
* Created by me on 2017/4/21.
*/
public class UI extends JFrame {
private JLabel label;
private JButton btn_show;
private JButton match;
private JTextField pathanme;
private JTextField typename;
private JLabel result;
private JLabel label2;
private JLabel label3;
private JScrollPane s_pane;
public UI(String title){
super(title);
instial();
}
public void instial(){
label=new JLabel("请输入你要遍历文件的路径");
label2=new JLabel("请输入你要遍历文件的类型");
btn_show=new JButton("遍历");
match=new JButton("查找");
pathanme=new JTextField(20);
typename=new JTextField(20);
result=new JLabel("路径可直接复制");
label3=new JLabel("注意:文件类型格式 例如.txt");
s_pane=new JScrollPane(result);
this.setBounds(200,300,500,140);
this.setLayout(new FlowLayout());
this.add(label);
this.add(pathanme);
this.add(btn_show);
this.add(label2);
this.add(typename);
this.add(match);
this.add(s_pane);
this.add(label3);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出应用程序
//添加事件响应
btn_show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String path=new String(pathanme.getText().toString());
Fileselect fileselect=new Fileselect(typename.getText().toString());
JOptionPane.showMessageDialog(null,"请看控制台");
fileselect.IteratorDir(new File(path));
}
});
match.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String mpath=new String(pathanme.getText().toString());
Fileselect fileselect=new Fileselect(typename.getText().toString());
JOptionPane.showMessageDialog(null,"请看控制台");
fileselect.filematch(new File(mpath));
}
});
}
}