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

登录  | 立即注册

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

查看: 278|回复: 0

【Java】gui版文件扫描器

[复制链接]

441

主题

506

帖子

1944

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1944

荣誉管理论坛元老

发表于 2021-6-30 22:19:18 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. import java.awt.EventQueue;* J7 r/ X2 A2 Z5 _( P% H
  2. * z9 C, t( i1 C6 A
  3. import javax.swing.*;
    8 V' z$ e0 k; o; p& b; q/ i
  4. import java.awt.Toolkit;
    4 }5 F: Z% s1 u# H/ O, r2 h, ~5 k, n  {, _
  5. import java.awt.event.ActionListener;
    4 P- g' H* f4 I6 a& e
  6. import java.io.File;( E5 B" e6 z, M5 U% _
  7. import java.awt.event.ActionEvent;! H% f3 ~, }  g* w0 Q9 {
  8. import java.awt.event.KeyAdapter;0 f+ B% v  W7 V- f- E; a+ @
  9. import java.awt.event.KeyEvent;
    2 C2 w* r7 X# R, ?& Q! v# |
  10. 1 I' M) ~# b& R$ t- v1 S; c
  11. public class SeachFile extends JFrame {; j% @" O1 [8 L8 X  H3 b
  12. $ y9 f" M- j% \
  13.         /**
    6 ^' ]9 x( ~9 g# M3 L: G
  14.          * 名称:文件扫描器) Q9 o' a  K$ H- ~3 E5 Y  g
  15.          * 时间:2019年2月274 b( a1 `6 ~! q
  16.          * 功能:扫描磁盘中的exe、txt、png文件; J, F  ~1 b/ \- D" _) @! s1 z
  17.          *                  实现搜索输入的文件的位置,没有运用多线程,后续加上
    , h+ T0 `9 k6 D
  18.          */
    . y. f& _# |: V: V5 A1 p& f
  19.         private static final long serialVersionUID = 1L;+ N6 Y! D5 K. `
  20.         static Toolkit kit = Toolkit.getDefaultToolkit();
    ( ?- g" Y# F: o: x" V* H
  21.         private int x = kit.getScreenSize().width / 4 ;/ P9 C2 K/ I6 N: I
  22.         private int y = kit.getScreenSize().height / 4;- M. I8 r% W0 Z% r9 l; b, p5 q% r
  23.         /**1 m. Q$ S7 d6 k( U  Y- Z
  24.          * Launch the application.
    " l! [6 ~9 [7 P5 K
  25.          */
    0 t, e/ w+ i, }1 ]
  26.         public static void main(String[] args) {$ ?- Y( }& \& s* L5 u
  27.                 EventQueue.invokeLater(new Runnable() {
    6 `- J( z& f' G3 x& f; G
  28.                         public void run() {
    ( E3 ~6 ~( |0 @' X3 E
  29.                                 try {
    + ]- g& V7 _! ?/ s  v% I# h. O
  30.                                         SeachFile frame = new SeachFile();
    & f6 q, |- T% N) h; d. X+ l% M
  31.                                         frame.setVisible(true);
    5 `, B$ W6 y& c; d, E
  32.                                 } catch (Exception e) {
    * W, Z9 ~8 }( }. \% a0 i
  33.                                         e.printStackTrace();: m# s* |5 R  s
  34.                                 }2 h8 k: R; o! x+ v9 s/ ~' r$ U
  35.                         }9 N1 a8 W( c$ ~! A
  36.                 });6 Z' u3 S2 G' \& L
  37.         }* o& U9 `" R) d
  38.         private JTextArea textArea;
    . S0 s. |5 w+ f
  39.         private JTextField textField;
    1 k2 @: ]' `) H0 C( _
  40.         public SeachFile() {
    + H/ p) K5 A% N; e
  41.                 setTitle("文件搜索");6 O( s3 v9 C8 z- |
  42.                 setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));3 e) w6 P/ c5 A2 g+ E
  43.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);+ W  I! v  p) W8 t2 F9 v
  44.                 setResizable(false);
    ; Z0 r5 [7 m& C
  45.                 setBounds(x, y, 943, 573);# s9 e" @5 E& F$ S/ o8 [) w- v9 [
  46.                 getContentPane().setLayout(null);
    7 ]6 q7 G2 k6 G
  47.                 : k# E4 b! h+ ~- `$ w2 N( a
  48.                 JLabel lblNewLabel = new JLabel("文件名:");
    " [$ Q' z" G% R! |! o2 A$ S
  49.                 lblNewLabel.setBounds(10, 20, 60, 30);+ O3 b% h3 J. t
  50.                 getContentPane().add(lblNewLabel);
    - }6 l; I/ L0 l" H2 K
  51.                
    0 E9 @( K0 ?. j; b! h; ?2 a
  52.                 textField = new JTextField();. u- X% P. K/ }/ }0 ?8 h$ Y' e9 t
  53.                 textField.addKeyListener(new KeyAdapter() {7 p4 P, u9 e& j0 u* b
  54.                         @Override
    * \  W7 U7 i$ D
  55.                         public void keyPressed(KeyEvent e) {
      N  _0 K/ s& _$ T& J
  56.                                 if (e.getKeyCode() == KeyEvent.VK_ENTER) {4 P! _7 b4 U/ g8 y: ~1 Y( ?& w
  57.                                         sw();1 H& G! e5 z& `
  58.                                 }
    5 V5 n  v  K2 Y; P% S4 P! H
  59.                         }' J7 }6 B( d3 X' `' k% X" C  M
  60.                 });
    ( r% I8 I; a& }* \/ u$ }, D6 w
  61.                 textField.setBounds(68, 21, 761, 30);& ~& V/ e0 ?' \5 x$ W, `( I9 A' N' g
  62.                 getContentPane().add(textField);
      J6 b7 Y+ D7 O. r. Q
  63.                 textField.setColumns(10);" ?2 `& N+ S8 m
  64.                
    0 A5 J5 c9 y$ d  e
  65.                 JButton btnNewButton = new JButton("搜索");
    % T# M  j$ N0 }9 ?; n, s3 z
  66.                 btnNewButton.addActionListener(new ActionListener() {  S. x! A! y0 O8 j9 ?
  67.                         public void actionPerformed(ActionEvent e) {
    6 _' P3 p* a5 u% }5 D
  68.                                 sw();
    . X" w, a$ z* c0 ], U* V$ L
  69.                         }
    + H" R1 D* W' V) V; {7 E9 @
  70.                 });
    ) ?9 \8 x. {% P' m* Q/ T
  71.                 btnNewButton.setBounds(836, 20, 93, 30);
    ! M' V3 v9 y7 S
  72.                 getContentPane().add(btnNewButton);
    . Y0 y2 t, V/ P! q( ?
  73.                 9 D' |! Q7 p! Z6 z% h9 U
  74.                 JScrollPane scrollPane = new JScrollPane();# e1 r( G/ y$ ]* Y
  75.                 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在+ ?8 S$ b& t/ J1 B! v
  76.                 scrollPane.setBounds(10, 60, 919, 465);* R, V/ k; Z; a& U
  77.                 getContentPane().add(scrollPane);( a7 z! j, [7 t0 e( G9 Z
  78.                
    + c. W! `+ H# O, t  ?; n5 p  j. n
  79.                 textArea = new JTextArea();
    5 L, p8 d! W. q( I
  80.                 textArea.setEditable(false);
    5 e# M( r. r. L7 `2 c& @+ p
  81.                 scrollPane.setViewportView(textArea);( [' K4 m: R$ c5 P
  82.         }
    & M, F* A* A4 X
  83.         8 ^9 ~9 E7 m- a. ]! l# J
  84.         $ ^1 {3 J' e. R9 x% `' J
  85.         @SuppressWarnings("unused")
    - ^  ~5 `( @: Y1 N1 V. s; d
  86.         public void sw() {. P4 H; c; q& }. S3 U
  87.                 if (textField.getText().equals("")) {* }; s( H4 q$ j( d0 Q" {  q  b$ a
  88.                         JOptionPane.showMessageDialog(null, "搜索不能为空");
    . W" s. k' N# N( s6 @: @' t
  89.                 }else {
    ' ~9 h- n8 j9 a1 ^, U
  90.                         //的到所有盘符7 a7 m9 ?! s: I/ W
  91.                         File[] root = File.listRoots();  H0 x. d( f& {1 |) P2 w
  92.                         //遍历盘符+ a8 q* S/ g5 ~) k8 i* w
  93.                         for (File path : root) {
    6 {+ B. K( U0 `/ x) x
  94.                                 //判断盘符是不是无效磁盘或者是不可读的) l. n& Y( O/ N/ f7 r- Y
  95.                                 if (path != null) {/ V$ S2 l4 I' d
  96.                                         //System.out.println(path.getPath());
    3 @! u" K  o; |2 _
  97.                                         //得到磁盘下的文件夹
    / j; n0 a8 K9 c7 b7 K  m" L
  98.                                         File[] sonroot = path.listFiles();) f& c7 a7 E  }+ L+ [) a5 y) _
  99.                                         JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");
    , Y" P" o0 j+ d7 F
  100.                                         for (File file : sonroot) {5 I. t4 E4 x* J/ j7 c$ _
  101.                                                 if (file.isHidden()) {        //检测是否是隐藏的
    4 J* x- B% O; c) F8 O" e" b
  102.                                                         if (file == null) {
    ! h5 d, }6 B8 T
  103.                                                                         break;
    + Z% B7 g" e. M, b9 E
  104.                                                         }
      s1 y- ^1 f. G0 c6 O) e3 y- H
  105.                                                 }
      e) I; \- y: X# y
  106.                                                 if (file.isDirectory()) {
    4 Z' m) f: a- R( I% K& |
  107.                                                         System.out.println(file.getPath());/ n% {+ s5 z3 J0 W8 z- C
  108.                                                         Seach(file);, m  \0 G% q4 M2 Q8 X5 H
  109.                                                 }4 ], I1 ]0 ~6 D( U% E0 g) E
  110.                                         }# o* T4 Q) N9 b
  111.                                 }else {  \) j! E/ [) R8 ^, v
  112.                                         break;
    9 C( @* S6 \5 ~- ]
  113.                                 }                               
    # a" A5 B3 I1 D2 |
  114.                         }/ F" h! L# W; q- N" a
  115.                        
    1 \* f) @6 k  C( Z( r, U
  116.                 }- G' J/ U" j. W* F
  117.         }
    & u/ V$ V! L( `% ^
  118.         /*5 Q! [# y' A  I
  119.          * 此段为搜索引擎
    % [# o6 M0 {) r& A
  120.          * 每扫描一个文件或者文件夹判断是否为null或者是否有权限1 J  V8 k3 _- t  p2 a' {
  121.          * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
    # S; H% @/ |& N: y% G
  122.          */& e$ N% j" c3 U) r& k  h, q
  123.         public void Seach(File path) {
    7 P$ h  p' e  l; U
  124.                 //将得到的路径下的文件转化成为一个数组% y8 q6 r1 E) c4 D/ D9 G
  125.                 File[] files = path.listFiles();
    ! R- G# Q7 U* r$ A& [8 [, [, k1 d
  126.                 //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归  n7 C$ N8 P$ r0 J: O  i% D7 H
  127.                 if (files == null) {3 b; }( w8 h: @( L. J* d
  128.                         return;
    - w5 d1 E1 f! B. N; A
  129.                 }% t0 B' g: s- n* k
  130.                 //循环遍历文件5 M$ W, Y0 T. v% }; t+ i: K" U
  131.                 for (File file : files) {$ i: ?$ G4 C% j7 |; O
  132.                         //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步) w2 @6 I0 {$ @7 J5 I
  133.                         if (file.isDirectory()) {
    3 h7 e, d( }9 M9 j! ^. _
  134.                                 //System.out.println(file.getPath());
      \% E6 G, q& m3 D
  135.                                 Seach(file);
    0 f- x; q0 J! o* W! f3 I. k
  136.                         }else {
    ) }1 n( |9 P& J
  137.                                 //判断文件是否可写和可读- E& j3 c6 [. t! p  m
  138.                                 if (file.canRead() && file.canWrite()) {
    2 S6 @3 c( j+ U
  139.                                         //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中, O- [/ s7 s$ A* C. O1 ~4 D) y
  140.                                         if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) {' J: U  G4 x7 }7 h: Y$ L! j
  141.                                                 //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中
    & X  h# U: }8 U/ f
  142.                                                 if (textField.getText().equals(file.getName())) {
    ' V1 ^6 A/ O6 a* G/ c; F
  143.                                                         JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
    8 y/ ?& S2 A6 B4 g4 G% m
  144.                                                         return;
    & B# E: l& V' S1 }. k0 M1 ?
  145.                                                 }4 G+ v6 v, p' Y% f; N6 ~( m: U
  146.                                                 textArea.append(file.getPath() + "\n");5 ]$ s0 ]' b: r8 z  q; [# R7 t- [( d
  147.                                         }3 o1 A1 j+ t: f/ o8 ~7 u
  148.                                 }
    " |4 P& a/ H' k; ^5 N& U
  149.                         }
    ( D5 X1 {9 I  E) ^
  150.                 }
      o, z. S# L- \( A+ u  [
  151.         }8 D$ K; v5 N/ @6 N- O# x
  152. }
    9 v2 l6 Y5 t$ e' o( o8 f5 [
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区

GMT+8, 2022-8-11 22:51 , Processed in 0.058921 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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