|
- import java.awt.EventQueue;
% q. {6 C" q+ D3 q( D. L- Y4 \
5 w0 ?, h6 V! I- i- import javax.swing.*;
1 Q" F* F$ ]+ x8 f0 v& h - import java.awt.Toolkit;
' S; }; P$ d. c8 O0 F( r - import java.awt.event.ActionListener;* M! D) r. h4 |5 R' Q; w( T
- import java.io.File;
, f& P9 \. q3 j - import java.awt.event.ActionEvent;
; a8 w$ j" D5 d, P - import java.awt.event.KeyAdapter;
0 S% Q* g5 F2 X, _. M - import java.awt.event.KeyEvent;
' C) E: E |" @ l0 H, i! H0 Q# q4 {
5 k' J( C1 F$ }5 [' M' P4 s- public class SeachFile extends JFrame {( O; N9 ~0 h, Y5 n! i0 Q
- 2 `/ q9 |) Q v9 V1 S
- /**
' n+ Q$ w" ]3 M" t; y1 s" ` - * 名称:文件扫描器
9 Z' E1 s/ F i9 z5 ? - * 时间:2019年2月27
$ E* |7 z" h6 V$ X' a - * 功能:扫描磁盘中的exe、txt、png文件
) E' ]& g0 f, {, Y - * 实现搜索输入的文件的位置,没有运用多线程,后续加上
0 S- }9 J# B) q - */
9 a" ~7 s5 Y8 K: d' } - private static final long serialVersionUID = 1L;
[) S1 E2 ?& v/ y1 s - static Toolkit kit = Toolkit.getDefaultToolkit();6 ^+ c6 X4 x- k; x1 m6 R
- private int x = kit.getScreenSize().width / 4 ;
: Z% e6 g' e( } - private int y = kit.getScreenSize().height / 4;! B$ Z2 }5 F; D( b$ ^3 ~3 D
- /**# {7 u! ~% D. j1 f* G3 A9 |6 ^9 F
- * Launch the application.: J2 a( I9 ]3 Y" b* i
- */
# ]: ?) d* w I6 _4 j - public static void main(String[] args) {, V0 }3 v/ R7 E; y+ W. ~$ q5 v
- EventQueue.invokeLater(new Runnable() {
- p+ h' M$ a$ q0 Q- j% N8 G - public void run() {; F7 ^& W' c6 l+ ?, |1 k
- try {7 I/ {) w& c( }1 ^/ c5 N
- SeachFile frame = new SeachFile();
' U5 e* l+ v, ]; y, L, } - frame.setVisible(true);$ m; ?& j( b, O/ y
- } catch (Exception e) {/ N6 _- k6 J. ~/ |- c: x
- e.printStackTrace();6 h! c; n) s! g, ^
- }4 b! T8 E1 |. P& p. e9 k# m
- }
+ K: ?3 S8 f6 U8 q" D4 j& [ - });) e3 x% i2 H4 _& r, N1 N1 [5 e6 N& d
- } ^8 W/ |9 [! x- d7 l, l! e
- private JTextArea textArea;+ h5 o3 q& Q) G* O3 s# d
- private JTextField textField; i8 L- }* T- r2 A* }
- public SeachFile() {
' X9 F. C: K' i/ V - setTitle("文件搜索");
, W3 ^3 k5 C) C - setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));9 T5 N+ O0 p8 ]; j$ z1 i
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
& @/ W2 h7 c+ C7 W. ` - setResizable(false);
+ D( Z; ^8 Q$ l' u, p& @) o, ]! P - setBounds(x, y, 943, 573);
" i* Q1 G3 k0 W! y" \8 d* J- F - getContentPane().setLayout(null);# R1 B8 R- t2 o8 i2 d' n- h
- , m' R6 G; y& x
- JLabel lblNewLabel = new JLabel("文件名:");: w! ~. r, u T1 f$ y- f
- lblNewLabel.setBounds(10, 20, 60, 30);
& q' @! ]# t! Q6 Q: B" ~ - getContentPane().add(lblNewLabel);# ]9 r- u- P) w
-
' Q3 B: w, `( Q* v' p) [ - textField = new JTextField();; K! v2 [6 ] R2 K- G4 v. {( O
- textField.addKeyListener(new KeyAdapter() {: s/ {: o8 Z7 [& r4 [( G
- @Override, @; v4 G- [/ H# ^/ ?/ p
- public void keyPressed(KeyEvent e) {4 o# Z; P# s- d# }) w3 \' `
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {: C! u; ^/ O' q) x5 x' t& q$ s
- sw();
& y! p- Q9 X0 `8 H5 f7 \ - }3 n7 v8 W! \/ U
- }
/ B0 N" D$ }- l" r; ^ - });: ^7 J+ c" E( ]. E V8 R
- textField.setBounds(68, 21, 761, 30);5 e! x9 j! R9 b
- getContentPane().add(textField);; a% l% K, J% q8 P# s
- textField.setColumns(10);) W- G& J. l9 H( n( d( W
-
# W- R5 V( n0 g* ] - JButton btnNewButton = new JButton("搜索");. S' ~& V; e+ f1 j
- btnNewButton.addActionListener(new ActionListener() {9 N. L0 G2 A f9 N
- public void actionPerformed(ActionEvent e) {4 V6 b1 v+ s4 U( j p
- sw();
0 Z; b1 ^' O5 U - }
! C5 x5 ?" t5 ?: K* t9 G - });
+ w, a+ V, q$ k( y - btnNewButton.setBounds(836, 20, 93, 30);- T7 h% J H6 y
- getContentPane().add(btnNewButton);& U7 M5 E. q, D, m4 `
- 0 F# ~/ ]$ V7 F
- JScrollPane scrollPane = new JScrollPane();
4 b! K5 W6 \- L; A+ K - scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在- ?4 ]6 f; i" G( B- }7 h2 @+ h( k& R
- scrollPane.setBounds(10, 60, 919, 465);
) R$ x X0 ~9 q8 a - getContentPane().add(scrollPane);' `5 N# D" r2 G; Z$ u" x9 U
-
2 g/ o A0 x1 m* ^. l. j - textArea = new JTextArea();7 s, _+ f4 {/ H5 }+ Q; r* G
- textArea.setEditable(false);5 B# G0 j; S! _- b& i; |" Q4 n
- scrollPane.setViewportView(textArea);8 c3 S' L% {/ _) J$ j) z# `
- }
2 G6 @: Q7 Q" q& N5 B" |2 k; K6 X -
5 m8 r1 k8 ^8 }$ u# `2 K- h - : K& p/ z( V3 d# ~! ` N
- @SuppressWarnings("unused")
$ B" c: c- g; N, S5 N8 o* ]# | - public void sw() {& W0 O7 V( h: T; _& S: x
- if (textField.getText().equals("")) {
. j. \) I. T2 G - JOptionPane.showMessageDialog(null, "搜索不能为空");
+ J3 ] N$ C7 {2 J$ z9 w - }else {: x, G* c& W* B# F$ Y, C; J+ s+ b- I
- //的到所有盘符7 v( c" U5 q) j: r$ m/ e( ^
- File[] root = File.listRoots();
4 N4 \- ^9 l' h, F2 j - //遍历盘符+ ^0 Z$ Z3 \4 r! d$ X* k4 s
- for (File path : root) {
( H, n0 I# i7 I4 Y8 f; \7 c7 U - //判断盘符是不是无效磁盘或者是不可读的
6 M0 S- J7 L+ [/ n# g2 m - if (path != null) {% O+ }- J8 O d* E5 p; R. k
- //System.out.println(path.getPath());9 G8 T8 ?% T" z# X
- //得到磁盘下的文件夹& ?5 Z7 h% Q! T# Q% V# N1 y( z
- File[] sonroot = path.listFiles();
/ j/ v( G' c$ _/ @ - JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");9 Q$ C. Y5 @2 o. R( S# q
- for (File file : sonroot) {
& @, k/ [* \7 d4 Z' e - if (file.isHidden()) { //检测是否是隐藏的
/ i* _8 L* J6 t7 f - if (file == null) {9 R5 k9 Y! G' n& q1 _2 ]
- break;/ ]8 }4 f; G: ]1 h
- }8 I+ I, E/ \1 p! K3 B: }) K
- }
* D. V1 a0 ?: t/ @ ]0 S - if (file.isDirectory()) {% Z8 d) k+ ^2 k0 N5 f. R2 j3 s
- System.out.println(file.getPath());% f2 p- m7 U( u
- Seach(file);7 L- C) `# W5 a- J8 F' y
- } D6 @0 ^8 z+ s7 _9 s
- }+ O' X& I: v8 C) g& Y
- }else {
# @$ a$ J6 s" |% F+ k" w5 \0 h" n - break;: h* S" e8 I* Z' s
- }
: U" I( I* J- B6 O P5 j) x4 \ - }' p* G( a7 |! D* o1 [ g L# ~
-
0 `0 N) ]/ [" m9 r/ k9 H# h - }( U& O8 \2 U& g/ A3 N. Z1 z
- }9 Z1 ]) @( C9 n& o5 D5 n
- /*0 L# p/ u- y8 W# h: B$ S& S
- * 此段为搜索引擎
2 A5 l% \. f9 t( f7 F1 V. {5 T( I3 G - * 每扫描一个文件或者文件夹判断是否为null或者是否有权限3 z. v; @5 j; }( o1 U' u+ A ~" s
- * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
1 x S, W: I, Q6 G1 { - */
6 Z! d. f3 G& Y/ \6 i# x: F( F- j - public void Seach(File path) {: j5 ^/ v4 r: ]& O0 F0 {
- //将得到的路径下的文件转化成为一个数组
6 ^" G4 W* Z) A - File[] files = path.listFiles();
% z% i U R, G1 S- e6 z, f - //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归
& L- |( U1 w6 v9 u, u - if (files == null) {. x1 _ j- e, K* P- z3 X/ a
- return;
! P- v( k8 a: F3 l - }! U! w8 a$ H# `- _6 O
- //循环遍历文件
8 m/ O }2 x5 _) n - for (File file : files) {2 m" D/ L/ ]: K+ r9 ~5 k6 J# Y
- //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步* z7 s+ Y5 A, `! d i$ U1 L1 h
- if (file.isDirectory()) {, f4 h" R* ?+ A8 R
- //System.out.println(file.getPath());
+ t, o& k h. K - Seach(file);- w9 P6 M( w I
- }else {
. M# S/ s K7 ~! Z/ z9 f - //判断文件是否可写和可读; m, F" e2 M1 J u* Q6 ?
- if (file.canRead() && file.canWrite()) {
: |6 B, Q$ g I/ i# j+ A - //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中( a( T5 p( l$ r
- if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) { J' |( D \* o& g6 j4 t
- //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中, ]9 ?6 }0 Q' L& K5 P5 R- l
- if (textField.getText().equals(file.getName())) {1 j) i7 W* N; U7 }
- JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
: p6 n4 `) e) X2 p# m0 m - return;4 Z' G. ]) }# l3 u
- }
2 B! D& ], ?3 n' i- m' W- O% b - textArea.append(file.getPath() + "\n");7 r0 Y. T) }; U1 j2 s$ y# x
- }
2 |4 ^0 U1 n# H - }+ O2 ^7 K% U+ q! D. n6 U
- }- ^: `; w& Y( C3 h$ n: X
- }1 }+ f- X. K: Y5 n* r" z
- }* I) [. r1 e1 N2 F, b; F$ o
- }% Q$ T5 D5 {! C2 }
复制代码 |
|