wangy 发表于 2021-6-30 22:19:18

【Java】gui版文件扫描器

import java.awt.EventQueue;

import javax.swing.*;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.io.File;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class SeachFile extends JFrame {

        /**
       * 名称:文件扫描器
       * 时间:2019年2月27
       * 功能:扫描磁盘中的exe、txt、png文件
       *                  实现搜索输入的文件的位置,没有运用多线程,后续加上
       */
        private static final long serialVersionUID = 1L;
        static Toolkit kit = Toolkit.getDefaultToolkit();
        private int x = kit.getScreenSize().width / 4 ;
        private int y = kit.getScreenSize().height / 4;
        /**
       * Launch the application.
       */
        public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        SeachFile frame = new SeachFile();
                                        frame.setVisible(true);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }
        private JTextArea textArea;
        private JTextField textField;
        public SeachFile() {
                setTitle("文件搜索");
                setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setResizable(false);
                setBounds(x, y, 943, 573);
                getContentPane().setLayout(null);
               
                JLabel lblNewLabel = new JLabel("文件名:");
                lblNewLabel.setBounds(10, 20, 60, 30);
                getContentPane().add(lblNewLabel);
               
                textField = new JTextField();
                textField.addKeyListener(new KeyAdapter() {
                        @Override
                        public void keyPressed(KeyEvent e) {
                                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                                        sw();
                                }
                        }
                });
                textField.setBounds(68, 21, 761, 30);
                getContentPane().add(textField);
                textField.setColumns(10);
               
                JButton btnNewButton = new JButton("搜索");
                btnNewButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                sw();
                        }
                });
                btnNewButton.setBounds(836, 20, 93, 30);
                getContentPane().add(btnNewButton);
               
                JScrollPane scrollPane = new JScrollPane();
                scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在
                scrollPane.setBounds(10, 60, 919, 465);
                getContentPane().add(scrollPane);
               
                textArea = new JTextArea();
                textArea.setEditable(false);
                scrollPane.setViewportView(textArea);
        }
       
       
        @SuppressWarnings("unused")
        public void sw() {
                if (textField.getText().equals("")) {
                        JOptionPane.showMessageDialog(null, "搜索不能为空");
                }else {
                        //的到所有盘符
                        File[] root = File.listRoots();
                        //遍历盘符
                        for (File path : root) {
                                //判断盘符是不是无效磁盘或者是不可读的
                                if (path != null) {
                                        //System.out.println(path.getPath());
                                        //得到磁盘下的文件夹
                                        File[] sonroot = path.listFiles();
                                        JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");
                                        for (File file : sonroot) {
                                                if (file.isHidden()) {        //检测是否是隐藏的
                                                        if (file == null) {
                                                                        break;
                                                        }
                                                }
                                                if (file.isDirectory()) {
                                                        System.out.println(file.getPath());
                                                        Seach(file);
                                                }
                                        }
                                }else {
                                        break;
                                }                               
                        }
                       
                }
        }
        /*
       * 此段为搜索引擎
       * 每扫描一个文件或者文件夹判断是否为null或者是否有权限
       * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
       */
        public void Seach(File path) {
                //将得到的路径下的文件转化成为一个数组
                File[] files = path.listFiles();
                //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归
                if (files == null) {
                        return;
                }
                //循环遍历文件
                for (File file : files) {
                        //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步
                        if (file.isDirectory()) {
                                //System.out.println(file.getPath());
                                Seach(file);
                        }else {
                                //判断文件是否可写和可读
                                if (file.canRead() && file.canWrite()) {
                                        //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中
                                        if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) {
                                                //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中
                                                if (textField.getText().equals(file.getName())) {
                                                        JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
                                                        return;
                                                }
                                                textArea.append(file.getPath() + "\n");
                                        }
                                }
                        }
                }
        }
}
页: [1]
查看完整版本: 【Java】gui版文件扫描器