登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 966|回复: 0

【Java】gui版文件扫描器

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:19:18 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. import java.awt.EventQueue;/ Z0 Z  W: K+ S3 I

  2. % ]2 N$ O6 u/ ^3 W0 v& h
  3. import javax.swing.*;0 N  G8 ?# T; R
  4. import java.awt.Toolkit;
      F# r  y8 K& D# r/ B2 y  {
  5. import java.awt.event.ActionListener;. b* n9 T- k2 f5 x0 A
  6. import java.io.File;
    , m5 s; ?% W2 l
  7. import java.awt.event.ActionEvent;+ X  m$ Y/ u7 g5 c" t( f5 ^8 E
  8. import java.awt.event.KeyAdapter;* O$ B; J4 F( b$ h1 V: C( q" g9 B, L* d
  9. import java.awt.event.KeyEvent;. X# l& V5 ]' O' {5 z' N/ z

  10. 0 @8 h9 d5 B6 r+ F& y/ z8 N
  11. public class SeachFile extends JFrame {7 p9 n& O2 d5 {
  12. ; H, v! @- A+ {9 m( `
  13.         /**
    0 R4 {8 Q9 q2 h$ R  Z
  14.          * 名称:文件扫描器
    0 v4 h; l$ t& R; I7 x
  15.          * 时间:2019年2月27" N5 \+ A& c0 Z5 J
  16.          * 功能:扫描磁盘中的exe、txt、png文件; U# b6 I4 f- ]5 G) ^2 C2 V
  17.          *                  实现搜索输入的文件的位置,没有运用多线程,后续加上
    ) d% U7 b* S$ s9 ^( e% Z: |
  18.          */
    6 _2 j  a3 {: l
  19.         private static final long serialVersionUID = 1L;- A, O4 e; S5 s+ S2 W( G
  20.         static Toolkit kit = Toolkit.getDefaultToolkit();: ?) l  D1 l0 P7 X5 a  \0 h
  21.         private int x = kit.getScreenSize().width / 4 ;
    / ?1 w8 G' N! J
  22.         private int y = kit.getScreenSize().height / 4;
    6 |% ~2 h/ |, S/ @$ m% X6 W
  23.         /**# S% z, j# Z0 A5 P- a4 W$ L/ S# e1 ^
  24.          * Launch the application.( x* t8 z& v' u
  25.          */* Y  ~4 G; B( b7 u. j: h
  26.         public static void main(String[] args) {
    , a3 s1 ]. o+ n$ U
  27.                 EventQueue.invokeLater(new Runnable() {2 M9 I1 j5 n8 F5 d/ x- C# P
  28.                         public void run() {
    , |$ p( o/ H* F, K1 T7 k
  29.                                 try {
    " B9 v: Y8 E6 e: J& k
  30.                                         SeachFile frame = new SeachFile();
    1 }. U  A+ E5 V8 ~' p
  31.                                         frame.setVisible(true);5 {1 z5 \4 @' J! J4 ?" c3 E
  32.                                 } catch (Exception e) {
    7 T0 Y4 v* X7 d# |
  33.                                         e.printStackTrace();/ `6 y; O9 c! E* l
  34.                                 }
    5 a7 Z" \8 F( o. Y. y$ O
  35.                         }
    / `( s/ `! r* M3 d' T4 p
  36.                 });
    5 m/ i$ m8 p0 {  n7 s
  37.         }
    / N, C" M4 F& \- Z$ |
  38.         private JTextArea textArea;; V  P2 O3 O# o$ R% M
  39.         private JTextField textField;/ h$ V, ~! [/ ]
  40.         public SeachFile() {
    & d# R+ M8 W. m6 c/ M7 X& @
  41.                 setTitle("文件搜索");
    3 Q6 K1 b9 `. X  J2 \
  42.                 setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));
    $ C) u4 E0 Z1 ^- a, Z
  43.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    , L5 b' O" @( Q' t9 X* U7 V  z
  44.                 setResizable(false);
    * f# K! v5 x" B  x
  45.                 setBounds(x, y, 943, 573);
    . l0 ?9 Z/ G! o7 Z- n
  46.                 getContentPane().setLayout(null);
    , _  }: e& q! i" k- I
  47.                 2 u+ Y/ X; n' w% k; C  z2 }
  48.                 JLabel lblNewLabel = new JLabel("文件名:");; _" F3 S9 D0 H
  49.                 lblNewLabel.setBounds(10, 20, 60, 30);+ f' X0 e: D: V$ ~  x( ^
  50.                 getContentPane().add(lblNewLabel);5 i$ c% I; q, h& k$ t1 J
  51.                   b: u2 {: C' ^
  52.                 textField = new JTextField();
    ) b& M+ u8 a" q/ N( r) N8 o0 W
  53.                 textField.addKeyListener(new KeyAdapter() {
    % y+ z. V" Z- P( X! e8 `/ Q
  54.                         @Override6 j- m* T4 h- X8 E8 d6 d9 T
  55.                         public void keyPressed(KeyEvent e) {5 f$ U, [4 j, f: _; P/ X% J- ]/ M
  56.                                 if (e.getKeyCode() == KeyEvent.VK_ENTER) {7 }0 {4 b2 H1 t
  57.                                         sw();- t, E7 d4 B5 E1 y# {1 C
  58.                                 }
    ' n( z; m( }! [" V* e* s
  59.                         }5 {( H! X& z# w$ x# q. R
  60.                 });3 Y; v+ v' @" Y& j9 C: h  L
  61.                 textField.setBounds(68, 21, 761, 30);
    6 I" V9 I- N1 F, D- r  a% s, a
  62.                 getContentPane().add(textField);5 P# H, {" ^; n7 g
  63.                 textField.setColumns(10);
    ( b( I3 p& n  n1 b. y
  64.                 - j- L2 T1 r$ }% M
  65.                 JButton btnNewButton = new JButton("搜索");
    + X  U+ f" Q6 V$ P, `" L
  66.                 btnNewButton.addActionListener(new ActionListener() {
    $ i* K3 |& t9 B2 |* S
  67.                         public void actionPerformed(ActionEvent e) {
    ! e0 U3 y! L3 p% \8 @) c2 P: V
  68.                                 sw();
    9 |; U3 x  p  b5 j% S
  69.                         }
    0 f6 d. w: F* D8 ^. N
  70.                 });
    $ t4 B; ?, z! t" I2 j" z  j
  71.                 btnNewButton.setBounds(836, 20, 93, 30);0 K( t# p" q8 q# `  p3 Q% x
  72.                 getContentPane().add(btnNewButton);( q1 e% Y2 M, ^# F" |1 N8 }
  73.                   `7 _/ k+ j5 G( L* G# e, Z# |
  74.                 JScrollPane scrollPane = new JScrollPane();- F9 o& v: x# m. R6 U* P
  75.                 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在' T% I# E/ U3 ~
  76.                 scrollPane.setBounds(10, 60, 919, 465);- Y* F& @2 f- L+ r8 I$ V& f# |
  77.                 getContentPane().add(scrollPane);
    % Q' [3 _& z& b2 j2 t
  78.                   r+ V7 i6 c# H$ H9 J. U( N+ @
  79.                 textArea = new JTextArea();7 j! ]) `- z) Y7 x- q5 w. q! O0 x
  80.                 textArea.setEditable(false);
    ! j/ d7 j6 |+ i, A/ V9 ^; b
  81.                 scrollPane.setViewportView(textArea);
    7 V4 ~) k0 f: u. ]9 [+ I3 i' r
  82.         }+ A; W7 i- A% y2 V) P
  83.         / S( U! I/ y2 T; z: a; C& m
  84.        
      ?, i. `/ R0 C
  85.         @SuppressWarnings("unused")* \7 U% C6 E# [* X) T; s5 C+ U" z
  86.         public void sw() {3 d0 _5 A3 _8 M( g7 P8 I- F3 H
  87.                 if (textField.getText().equals("")) {; ^( c' d# u4 Y4 K
  88.                         JOptionPane.showMessageDialog(null, "搜索不能为空");7 E- ^" h4 ]1 I! Z9 _( m
  89.                 }else {
    # k' @9 {5 I( {! t! g
  90.                         //的到所有盘符9 z5 \( }( K" c5 f2 w' s
  91.                         File[] root = File.listRoots();
    $ Q5 O3 O, c- ~/ |" k* s  m
  92.                         //遍历盘符. Q4 M: [# Z8 c2 H% T! p& y
  93.                         for (File path : root) {, H- Q3 Q3 @3 R5 D: R( [
  94.                                 //判断盘符是不是无效磁盘或者是不可读的
    , b- o, [% q& ?; p5 }4 z
  95.                                 if (path != null) {
    % N1 t6 @9 c& n5 G2 Y
  96.                                         //System.out.println(path.getPath());' i3 {) z; H1 [7 O5 @& K1 K
  97.                                         //得到磁盘下的文件夹
    + h* [" H9 V2 y, s) ~* ^& ]
  98.                                         File[] sonroot = path.listFiles();+ P2 ^  N/ c; ]$ k. b
  99.                                         JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");
    ; k+ a' S# N5 `" ?) b7 a
  100.                                         for (File file : sonroot) {
    $ z9 x7 _# c& ]+ J/ j% r' T
  101.                                                 if (file.isHidden()) {        //检测是否是隐藏的
    ' z6 _* a9 ^+ w8 N' K: l& W: ~6 P! i! z
  102.                                                         if (file == null) {
    2 [( i+ y5 N8 a2 T3 R
  103.                                                                         break;
    + D; j6 j% y$ a9 d0 S, `* D
  104.                                                         }
    5 C, v' h. ?  z+ t
  105.                                                 }
    6 V: N, ~+ t5 n' ?* V+ g2 o. ]# d
  106.                                                 if (file.isDirectory()) {4 e- v7 v, U5 d+ i+ G' ~
  107.                                                         System.out.println(file.getPath());; I3 z9 q) H( }' ?
  108.                                                         Seach(file);
    6 j; N- O) y+ K! J+ h1 {+ I& E
  109.                                                 }4 p2 }& Z3 s4 ^1 h) r8 l8 _" ^) z
  110.                                         }
    . s/ l: [$ ~" p2 Q  C6 C9 j/ \: x
  111.                                 }else {& \1 _% B( ^' o( o
  112.                                         break;
    - W* Q1 i! W7 N* w% N
  113.                                 }                               
    8 H7 m) {+ t) W3 Q' j" D
  114.                         }
    & ^- X4 n! Q: c9 l
  115.                         * B5 u5 e; P/ a2 `
  116.                 }
    * S- o) c0 t2 n9 o3 T+ V, R0 _
  117.         }( r" {) H4 B/ e3 j* h
  118.         /*  e. G. n3 j. v  c8 C
  119.          * 此段为搜索引擎6 ~6 O& S/ ?4 [9 Q4 `
  120.          * 每扫描一个文件或者文件夹判断是否为null或者是否有权限- D$ k$ @/ l4 k$ _8 M
  121.          * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
    9 R! l- s; }9 a. S
  122.          */% I  K. a& z5 M
  123.         public void Seach(File path) {
    $ k7 h! u' f. _- ?* K2 p5 n
  124.                 //将得到的路径下的文件转化成为一个数组
    6 |7 }* `  t" N2 H2 y
  125.                 File[] files = path.listFiles();/ W8 X( Q) Q/ n! U  k+ A7 c
  126.                 //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归# ~5 K4 A, c0 j" }/ Z
  127.                 if (files == null) {6 n" ^  @6 F. M  g, }' r- N9 W
  128.                         return;
    8 |/ x. G/ }5 Y6 |& G+ _
  129.                 }( x( N6 i8 L2 }+ L& |
  130.                 //循环遍历文件
    2 Z/ ]2 e5 m  C6 E
  131.                 for (File file : files) {; r& y2 A! C& J% |1 R  p
  132.                         //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步
    9 g( O4 h$ r& Q  X3 p- Y* K: `2 j
  133.                         if (file.isDirectory()) {
    7 m7 a6 a) ^9 q
  134.                                 //System.out.println(file.getPath());
    - R. M7 o+ a, r7 [
  135.                                 Seach(file);/ I! Y# O- j7 m0 R2 {& V
  136.                         }else {
    ! {, c; p: D9 o  ?" R
  137.                                 //判断文件是否可写和可读$ V0 p: o( C! R. V; ^2 B9 t
  138.                                 if (file.canRead() && file.canWrite()) {/ S/ F3 Z9 H( ]6 W! I$ m  s
  139.                                         //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中
    4 ~4 X$ s, a2 _7 w& }# H
  140.                                         if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) {
    : D$ e) d9 \  i. M
  141.                                                 //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中4 A. h, G; C( }; D  E& I+ ]- W! O2 D
  142.                                                 if (textField.getText().equals(file.getName())) {
    5 q  g. F2 N/ o1 q1 @- m
  143.                                                         JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
    / K  m5 t0 I; n+ n" Q$ d& y
  144.                                                         return;
    % U5 V4 r" j8 A5 B$ Z8 |
  145.                                                 }
    % t9 P8 K% ^( P! ?( c, Z
  146.                                                 textArea.append(file.getPath() + "\n");
    1 Z+ X: ]; B" i
  147.                                         }
    4 A1 c5 i( n1 P
  148.                                 }' l  X3 v+ G; ?9 E; |* l
  149.                         }2 H- [7 {4 r7 ?
  150.                 }" @/ Z9 M# I, B4 q3 I# B
  151.         }
    ! j. I7 t: O- X/ U$ O/ V
  152. }
    : m" m6 X: v0 ~( A- l: ^
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-25 20:28 , Processed in 0.047825 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表