请选择 进入手机版 | 继续访问电脑版

登录  | 立即注册

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

查看: 932|回复: 0

【Java】gui版文件扫描器

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:19:18 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. import java.awt.EventQueue;
    % q. {6 C" q+ D3 q( D. L- Y4 \

  2. 5 w0 ?, h6 V! I- i
  3. import javax.swing.*;
    1 Q" F* F$ ]+ x8 f0 v& h
  4. import java.awt.Toolkit;
    ' S; }; P$ d. c8 O0 F( r
  5. import java.awt.event.ActionListener;* M! D) r. h4 |5 R' Q; w( T
  6. import java.io.File;
    , f& P9 \. q3 j
  7. import java.awt.event.ActionEvent;
    ; a8 w$ j" D5 d, P
  8. import java.awt.event.KeyAdapter;
    0 S% Q* g5 F2 X, _. M
  9. import java.awt.event.KeyEvent;
    ' C) E: E  |" @  l0 H, i! H0 Q# q4 {

  10. 5 k' J( C1 F$ }5 [' M' P4 s
  11. public class SeachFile extends JFrame {( O; N9 ~0 h, Y5 n! i0 Q
  12. 2 `/ q9 |) Q  v9 V1 S
  13.         /**
    ' n+ Q$ w" ]3 M" t; y1 s" `
  14.          * 名称:文件扫描器
    9 Z' E1 s/ F  i9 z5 ?
  15.          * 时间:2019年2月27
    $ E* |7 z" h6 V$ X' a
  16.          * 功能:扫描磁盘中的exe、txt、png文件
    ) E' ]& g0 f, {, Y
  17.          *                  实现搜索输入的文件的位置,没有运用多线程,后续加上
    0 S- }9 J# B) q
  18.          */
    9 a" ~7 s5 Y8 K: d' }
  19.         private static final long serialVersionUID = 1L;
      [) S1 E2 ?& v/ y1 s
  20.         static Toolkit kit = Toolkit.getDefaultToolkit();6 ^+ c6 X4 x- k; x1 m6 R
  21.         private int x = kit.getScreenSize().width / 4 ;
    : Z% e6 g' e( }
  22.         private int y = kit.getScreenSize().height / 4;! B$ Z2 }5 F; D( b$ ^3 ~3 D
  23.         /**# {7 u! ~% D. j1 f* G3 A9 |6 ^9 F
  24.          * Launch the application.: J2 a( I9 ]3 Y" b* i
  25.          */
    # ]: ?) d* w  I6 _4 j
  26.         public static void main(String[] args) {, V0 }3 v/ R7 E; y+ W. ~$ q5 v
  27.                 EventQueue.invokeLater(new Runnable() {
    - p+ h' M$ a$ q0 Q- j% N8 G
  28.                         public void run() {; F7 ^& W' c6 l+ ?, |1 k
  29.                                 try {7 I/ {) w& c( }1 ^/ c5 N
  30.                                         SeachFile frame = new SeachFile();
    ' U5 e* l+ v, ]; y, L, }
  31.                                         frame.setVisible(true);$ m; ?& j( b, O/ y
  32.                                 } catch (Exception e) {/ N6 _- k6 J. ~/ |- c: x
  33.                                         e.printStackTrace();6 h! c; n) s! g, ^
  34.                                 }4 b! T8 E1 |. P& p. e9 k# m
  35.                         }
    + K: ?3 S8 f6 U8 q" D4 j& [
  36.                 });) e3 x% i2 H4 _& r, N1 N1 [5 e6 N& d
  37.         }  ^8 W/ |9 [! x- d7 l, l! e
  38.         private JTextArea textArea;+ h5 o3 q& Q) G* O3 s# d
  39.         private JTextField textField;  i8 L- }* T- r2 A* }
  40.         public SeachFile() {
    ' X9 F. C: K' i/ V
  41.                 setTitle("文件搜索");
    , W3 ^3 k5 C) C
  42.                 setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));9 T5 N+ O0 p8 ]; j$ z1 i
  43.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    & @/ W2 h7 c+ C7 W. `
  44.                 setResizable(false);
    + D( Z; ^8 Q$ l' u, p& @) o, ]! P
  45.                 setBounds(x, y, 943, 573);
    " i* Q1 G3 k0 W! y" \8 d* J- F
  46.                 getContentPane().setLayout(null);# R1 B8 R- t2 o8 i2 d' n- h
  47.                 , m' R6 G; y& x
  48.                 JLabel lblNewLabel = new JLabel("文件名:");: w! ~. r, u  T1 f$ y- f
  49.                 lblNewLabel.setBounds(10, 20, 60, 30);
    & q' @! ]# t! Q6 Q: B" ~
  50.                 getContentPane().add(lblNewLabel);# ]9 r- u- P) w
  51.                
    ' Q3 B: w, `( Q* v' p) [
  52.                 textField = new JTextField();; K! v2 [6 ]  R2 K- G4 v. {( O
  53.                 textField.addKeyListener(new KeyAdapter() {: s/ {: o8 Z7 [& r4 [( G
  54.                         @Override, @; v4 G- [/ H# ^/ ?/ p
  55.                         public void keyPressed(KeyEvent e) {4 o# Z; P# s- d# }) w3 \' `
  56.                                 if (e.getKeyCode() == KeyEvent.VK_ENTER) {: C! u; ^/ O' q) x5 x' t& q$ s
  57.                                         sw();
    & y! p- Q9 X0 `8 H5 f7 \
  58.                                 }3 n7 v8 W! \/ U
  59.                         }
    / B0 N" D$ }- l" r; ^
  60.                 });: ^7 J+ c" E( ]. E  V8 R
  61.                 textField.setBounds(68, 21, 761, 30);5 e! x9 j! R9 b
  62.                 getContentPane().add(textField);; a% l% K, J% q8 P# s
  63.                 textField.setColumns(10);) W- G& J. l9 H( n( d( W
  64.                
    # W- R5 V( n0 g* ]
  65.                 JButton btnNewButton = new JButton("搜索");. S' ~& V; e+ f1 j
  66.                 btnNewButton.addActionListener(new ActionListener() {9 N. L0 G2 A  f9 N
  67.                         public void actionPerformed(ActionEvent e) {4 V6 b1 v+ s4 U( j  p
  68.                                 sw();
    0 Z; b1 ^' O5 U
  69.                         }
    ! C5 x5 ?" t5 ?: K* t9 G
  70.                 });
    + w, a+ V, q$ k( y
  71.                 btnNewButton.setBounds(836, 20, 93, 30);- T7 h% J  H6 y
  72.                 getContentPane().add(btnNewButton);& U7 M5 E. q, D, m4 `
  73.                 0 F# ~/ ]$ V7 F
  74.                 JScrollPane scrollPane = new JScrollPane();
    4 b! K5 W6 \- L; A+ K
  75.                 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在- ?4 ]6 f; i" G( B- }7 h2 @+ h( k& R
  76.                 scrollPane.setBounds(10, 60, 919, 465);
    ) R$ x  X0 ~9 q8 a
  77.                 getContentPane().add(scrollPane);' `5 N# D" r2 G; Z$ u" x9 U
  78.                
    2 g/ o  A0 x1 m* ^. l. j
  79.                 textArea = new JTextArea();7 s, _+ f4 {/ H5 }+ Q; r* G
  80.                 textArea.setEditable(false);5 B# G0 j; S! _- b& i; |" Q4 n
  81.                 scrollPane.setViewportView(textArea);8 c3 S' L% {/ _) J$ j) z# `
  82.         }
    2 G6 @: Q7 Q" q& N5 B" |2 k; K6 X
  83.        
    5 m8 r1 k8 ^8 }$ u# `2 K- h
  84.         : K& p/ z( V3 d# ~! `  N
  85.         @SuppressWarnings("unused")
    $ B" c: c- g; N, S5 N8 o* ]# |
  86.         public void sw() {& W0 O7 V( h: T; _& S: x
  87.                 if (textField.getText().equals("")) {
    . j. \) I. T2 G
  88.                         JOptionPane.showMessageDialog(null, "搜索不能为空");
    + J3 ]  N$ C7 {2 J$ z9 w
  89.                 }else {: x, G* c& W* B# F$ Y, C; J+ s+ b- I
  90.                         //的到所有盘符7 v( c" U5 q) j: r$ m/ e( ^
  91.                         File[] root = File.listRoots();
    4 N4 \- ^9 l' h, F2 j
  92.                         //遍历盘符+ ^0 Z$ Z3 \4 r! d$ X* k4 s
  93.                         for (File path : root) {
    ( H, n0 I# i7 I4 Y8 f; \7 c7 U
  94.                                 //判断盘符是不是无效磁盘或者是不可读的
    6 M0 S- J7 L+ [/ n# g2 m
  95.                                 if (path != null) {% O+ }- J8 O  d* E5 p; R. k
  96.                                         //System.out.println(path.getPath());9 G8 T8 ?% T" z# X
  97.                                         //得到磁盘下的文件夹& ?5 Z7 h% Q! T# Q% V# N1 y( z
  98.                                         File[] sonroot = path.listFiles();
    / j/ v( G' c$ _/ @
  99.                                         JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");9 Q$ C. Y5 @2 o. R( S# q
  100.                                         for (File file : sonroot) {
    & @, k/ [* \7 d4 Z' e
  101.                                                 if (file.isHidden()) {        //检测是否是隐藏的
    / i* _8 L* J6 t7 f
  102.                                                         if (file == null) {9 R5 k9 Y! G' n& q1 _2 ]
  103.                                                                         break;/ ]8 }4 f; G: ]1 h
  104.                                                         }8 I+ I, E/ \1 p! K3 B: }) K
  105.                                                 }
    * D. V1 a0 ?: t/ @  ]0 S
  106.                                                 if (file.isDirectory()) {% Z8 d) k+ ^2 k0 N5 f. R2 j3 s
  107.                                                         System.out.println(file.getPath());% f2 p- m7 U( u
  108.                                                         Seach(file);7 L- C) `# W5 a- J8 F' y
  109.                                                 }  D6 @0 ^8 z+ s7 _9 s
  110.                                         }+ O' X& I: v8 C) g& Y
  111.                                 }else {
    # @$ a$ J6 s" |% F+ k" w5 \0 h" n
  112.                                         break;: h* S" e8 I* Z' s
  113.                                 }                               
    : U" I( I* J- B6 O  P5 j) x4 \
  114.                         }' p* G( a7 |! D* o1 [  g  L# ~
  115.                        
    0 `0 N) ]/ [" m9 r/ k9 H# h
  116.                 }( U& O8 \2 U& g/ A3 N. Z1 z
  117.         }9 Z1 ]) @( C9 n& o5 D5 n
  118.         /*0 L# p/ u- y8 W# h: B$ S& S
  119.          * 此段为搜索引擎
    2 A5 l% \. f9 t( f7 F1 V. {5 T( I3 G
  120.          * 每扫描一个文件或者文件夹判断是否为null或者是否有权限3 z. v; @5 j; }( o1 U' u+ A  ~" s
  121.          * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
    1 x  S, W: I, Q6 G1 {
  122.          */
    6 Z! d. f3 G& Y/ \6 i# x: F( F- j
  123.         public void Seach(File path) {: j5 ^/ v4 r: ]& O0 F0 {
  124.                 //将得到的路径下的文件转化成为一个数组
    6 ^" G4 W* Z) A
  125.                 File[] files = path.listFiles();
    % z% i  U  R, G1 S- e6 z, f
  126.                 //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归
    & L- |( U1 w6 v9 u, u
  127.                 if (files == null) {. x1 _  j- e, K* P- z3 X/ a
  128.                         return;
    ! P- v( k8 a: F3 l
  129.                 }! U! w8 a$ H# `- _6 O
  130.                 //循环遍历文件
    8 m/ O  }2 x5 _) n
  131.                 for (File file : files) {2 m" D/ L/ ]: K+ r9 ~5 k6 J# Y
  132.                         //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步* z7 s+ Y5 A, `! d  i$ U1 L1 h
  133.                         if (file.isDirectory()) {, f4 h" R* ?+ A8 R
  134.                                 //System.out.println(file.getPath());
    + t, o& k  h. K
  135.                                 Seach(file);- w9 P6 M( w  I
  136.                         }else {
    . M# S/ s  K7 ~! Z/ z9 f
  137.                                 //判断文件是否可写和可读; m, F" e2 M1 J  u* Q6 ?
  138.                                 if (file.canRead() && file.canWrite()) {
    : |6 B, Q$ g  I/ i# j+ A
  139.                                         //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中( a( T5 p( l$ r
  140.                                         if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) {  J' |( D  \* o& g6 j4 t
  141.                                                 //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中, ]9 ?6 }0 Q' L& K5 P5 R- l
  142.                                                 if (textField.getText().equals(file.getName())) {1 j) i7 W* N; U7 }
  143.                                                         JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
    : p6 n4 `) e) X2 p# m0 m
  144.                                                         return;4 Z' G. ]) }# l3 u
  145.                                                 }
    2 B! D& ], ?3 n' i- m' W- O% b
  146.                                                 textArea.append(file.getPath() + "\n");7 r0 Y. T) }; U1 j2 s$ y# x
  147.                                         }
    2 |4 ^0 U1 n# H
  148.                                 }+ O2 ^7 K% U+ q! D. n6 U
  149.                         }- ^: `; w& Y( C3 h$ n: X
  150.                 }1 }+ f- X. K: Y5 n* r" z
  151.         }* I) [. r1 e1 N2 F, b; F$ o
  152. }% Q$ T5 D5 {! C2 }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-28 22:15 , Processed in 0.049132 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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