Java实现文件的遍历 类型匹配(图形化界面)

来源:互联网 发布:淘宝店铺装修特效 编辑:程序博客网 时间:2024/05/29 16:29
package Filetraverse;


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));
            }
        });
    }
}


原创粉丝点击