|
- import java.awt.EventQueue;/ Z0 Z W: K+ S3 I
% ]2 N$ O6 u/ ^3 W0 v& h- import javax.swing.*;0 N G8 ?# T; R
- import java.awt.Toolkit;
F# r y8 K& D# r/ B2 y { - import java.awt.event.ActionListener;. b* n9 T- k2 f5 x0 A
- import java.io.File;
, m5 s; ?% W2 l - import java.awt.event.ActionEvent;+ X m$ Y/ u7 g5 c" t( f5 ^8 E
- import java.awt.event.KeyAdapter;* O$ B; J4 F( b$ h1 V: C( q" g9 B, L* d
- import java.awt.event.KeyEvent;. X# l& V5 ]' O' {5 z' N/ z
0 @8 h9 d5 B6 r+ F& y/ z8 N- public class SeachFile extends JFrame {7 p9 n& O2 d5 {
- ; H, v! @- A+ {9 m( `
- /**
0 R4 {8 Q9 q2 h$ R Z - * 名称:文件扫描器
0 v4 h; l$ t& R; I7 x - * 时间:2019年2月27" N5 \+ A& c0 Z5 J
- * 功能:扫描磁盘中的exe、txt、png文件; U# b6 I4 f- ]5 G) ^2 C2 V
- * 实现搜索输入的文件的位置,没有运用多线程,后续加上
) d% U7 b* S$ s9 ^( e% Z: | - */
6 _2 j a3 {: l - private static final long serialVersionUID = 1L;- A, O4 e; S5 s+ S2 W( G
- static Toolkit kit = Toolkit.getDefaultToolkit();: ?) l D1 l0 P7 X5 a \0 h
- private int x = kit.getScreenSize().width / 4 ;
/ ?1 w8 G' N! J - private int y = kit.getScreenSize().height / 4;
6 |% ~2 h/ |, S/ @$ m% X6 W - /**# S% z, j# Z0 A5 P- a4 W$ L/ S# e1 ^
- * Launch the application.( x* t8 z& v' u
- */* Y ~4 G; B( b7 u. j: h
- public static void main(String[] args) {
, a3 s1 ]. o+ n$ U - EventQueue.invokeLater(new Runnable() {2 M9 I1 j5 n8 F5 d/ x- C# P
- public void run() {
, |$ p( o/ H* F, K1 T7 k - try {
" B9 v: Y8 E6 e: J& k - SeachFile frame = new SeachFile();
1 }. U A+ E5 V8 ~' p - frame.setVisible(true);5 {1 z5 \4 @' J! J4 ?" c3 E
- } catch (Exception e) {
7 T0 Y4 v* X7 d# | - e.printStackTrace();/ `6 y; O9 c! E* l
- }
5 a7 Z" \8 F( o. Y. y$ O - }
/ `( s/ `! r* M3 d' T4 p - });
5 m/ i$ m8 p0 { n7 s - }
/ N, C" M4 F& \- Z$ | - private JTextArea textArea;; V P2 O3 O# o$ R% M
- private JTextField textField;/ h$ V, ~! [/ ]
- public SeachFile() {
& d# R+ M8 W. m6 c/ M7 X& @ - setTitle("文件搜索");
3 Q6 K1 b9 `. X J2 \ - setIconImage(Toolkit.getDefaultToolkit().getImage("src\\swing\\12.jpg"));
$ C) u4 E0 Z1 ^- a, Z - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
, L5 b' O" @( Q' t9 X* U7 V z - setResizable(false);
* f# K! v5 x" B x - setBounds(x, y, 943, 573);
. l0 ?9 Z/ G! o7 Z- n - getContentPane().setLayout(null);
, _ }: e& q! i" k- I - 2 u+ Y/ X; n' w% k; C z2 }
- JLabel lblNewLabel = new JLabel("文件名:");; _" F3 S9 D0 H
- lblNewLabel.setBounds(10, 20, 60, 30);+ f' X0 e: D: V$ ~ x( ^
- getContentPane().add(lblNewLabel);5 i$ c% I; q, h& k$ t1 J
- b: u2 {: C' ^
- textField = new JTextField();
) b& M+ u8 a" q/ N( r) N8 o0 W - textField.addKeyListener(new KeyAdapter() {
% y+ z. V" Z- P( X! e8 `/ Q - @Override6 j- m* T4 h- X8 E8 d6 d9 T
- public void keyPressed(KeyEvent e) {5 f$ U, [4 j, f: _; P/ X% J- ]/ M
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {7 }0 {4 b2 H1 t
- sw();- t, E7 d4 B5 E1 y# {1 C
- }
' n( z; m( }! [" V* e* s - }5 {( H! X& z# w$ x# q. R
- });3 Y; v+ v' @" Y& j9 C: h L
- textField.setBounds(68, 21, 761, 30);
6 I" V9 I- N1 F, D- r a% s, a - getContentPane().add(textField);5 P# H, {" ^; n7 g
- textField.setColumns(10);
( b( I3 p& n n1 b. y - - j- L2 T1 r$ }% M
- JButton btnNewButton = new JButton("搜索");
+ X U+ f" Q6 V$ P, `" L - btnNewButton.addActionListener(new ActionListener() {
$ i* K3 |& t9 B2 |* S - public void actionPerformed(ActionEvent e) {
! e0 U3 y! L3 p% \8 @) c2 P: V - sw();
9 |; U3 x p b5 j% S - }
0 f6 d. w: F* D8 ^. N - });
$ t4 B; ?, z! t" I2 j" z j - btnNewButton.setBounds(836, 20, 93, 30);0 K( t# p" q8 q# ` p3 Q% x
- getContentPane().add(btnNewButton);( q1 e% Y2 M, ^# F" |1 N8 }
- `7 _/ k+ j5 G( L* G# e, Z# |
- JScrollPane scrollPane = new JScrollPane();- F9 o& v: x# m. R6 U* P
- scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条一直在' T% I# E/ U3 ~
- scrollPane.setBounds(10, 60, 919, 465);- Y* F& @2 f- L+ r8 I$ V& f# |
- getContentPane().add(scrollPane);
% Q' [3 _& z& b2 j2 t - r+ V7 i6 c# H$ H9 J. U( N+ @
- textArea = new JTextArea();7 j! ]) `- z) Y7 x- q5 w. q! O0 x
- textArea.setEditable(false);
! j/ d7 j6 |+ i, A/ V9 ^; b - scrollPane.setViewportView(textArea);
7 V4 ~) k0 f: u. ]9 [+ I3 i' r - }+ A; W7 i- A% y2 V) P
- / S( U! I/ y2 T; z: a; C& m
-
?, i. `/ R0 C - @SuppressWarnings("unused")* \7 U% C6 E# [* X) T; s5 C+ U" z
- public void sw() {3 d0 _5 A3 _8 M( g7 P8 I- F3 H
- if (textField.getText().equals("")) {; ^( c' d# u4 Y4 K
- JOptionPane.showMessageDialog(null, "搜索不能为空");7 E- ^" h4 ]1 I! Z9 _( m
- }else {
# k' @9 {5 I( {! t! g - //的到所有盘符9 z5 \( }( K" c5 f2 w' s
- File[] root = File.listRoots();
$ Q5 O3 O, c- ~/ |" k* s m - //遍历盘符. Q4 M: [# Z8 c2 H% T! p& y
- for (File path : root) {, H- Q3 Q3 @3 R5 D: R( [
- //判断盘符是不是无效磁盘或者是不可读的
, b- o, [% q& ?; p5 }4 z - if (path != null) {
% N1 t6 @9 c& n5 G2 Y - //System.out.println(path.getPath());' i3 {) z; H1 [7 O5 @& K1 K
- //得到磁盘下的文件夹
+ h* [" H9 V2 y, s) ~* ^& ] - File[] sonroot = path.listFiles();+ P2 ^ N/ c; ]$ k. b
- JOptionPane.showMessageDialog(null, "磁盘扫描中请稍等");
; k+ a' S# N5 `" ?) b7 a - for (File file : sonroot) {
$ z9 x7 _# c& ]+ J/ j% r' T - if (file.isHidden()) { //检测是否是隐藏的
' z6 _* a9 ^+ w8 N' K: l& W: ~6 P! i! z - if (file == null) {
2 [( i+ y5 N8 a2 T3 R - break;
+ D; j6 j% y$ a9 d0 S, `* D - }
5 C, v' h. ? z+ t - }
6 V: N, ~+ t5 n' ?* V+ g2 o. ]# d - if (file.isDirectory()) {4 e- v7 v, U5 d+ i+ G' ~
- System.out.println(file.getPath());; I3 z9 q) H( }' ?
- Seach(file);
6 j; N- O) y+ K! J+ h1 {+ I& E - }4 p2 }& Z3 s4 ^1 h) r8 l8 _" ^) z
- }
. s/ l: [$ ~" p2 Q C6 C9 j/ \: x - }else {& \1 _% B( ^' o( o
- break;
- W* Q1 i! W7 N* w% N - }
8 H7 m) {+ t) W3 Q' j" D - }
& ^- X4 n! Q: c9 l - * B5 u5 e; P/ a2 `
- }
* S- o) c0 t2 n9 o3 T+ V, R0 _ - }( r" {) H4 B/ e3 j* h
- /* e. G. n3 j. v c8 C
- * 此段为搜索引擎6 ~6 O& S/ ?4 [9 Q4 `
- * 每扫描一个文件或者文件夹判断是否为null或者是否有权限- D$ k$ @/ l4 k$ _8 M
- * 有权限的将遍历,看是否为文件是的话在文本域中追加信息
9 R! l- s; }9 a. S - */% I K. a& z5 M
- public void Seach(File path) {
$ k7 h! u' f. _- ?* K2 p5 n - //将得到的路径下的文件转化成为一个数组
6 |7 }* ` t" N2 H2 y - File[] files = path.listFiles();/ W8 X( Q) Q/ n! U k+ A7 c
- //判断文件是否为空或者有无访问权限,有访问权限进行下一步,反之则结束这个递归# ~5 K4 A, c0 j" }/ Z
- if (files == null) {6 n" ^ @6 F. M g, }' r- N9 W
- return;
8 |/ x. G/ }5 Y6 |& G+ _ - }( x( N6 i8 L2 }+ L& |
- //循环遍历文件
2 Z/ ]2 e5 m C6 E - for (File file : files) {; r& y2 A! C& J% |1 R p
- //判断是否为文件夹,是文件夹进行递归,不是就可以进行下一步
9 g( O4 h$ r& Q X3 p- Y* K: `2 j - if (file.isDirectory()) {
7 m7 a6 a) ^9 q - //System.out.println(file.getPath());
- R. M7 o+ a, r7 [ - Seach(file);/ I! Y# O- j7 m0 R2 {& V
- }else {
! {, c; p: D9 o ?" R - //判断文件是否可写和可读$ V0 p: o( C! R. V; ^2 B9 t
- if (file.canRead() && file.canWrite()) {/ S/ F3 Z9 H( ]6 W! I$ m s
- //判断文件的名字结尾是否以txt、exe、png结尾,以它们结尾追加到文本域中
4 ~4 X$ s, a2 _7 w& }# H - if (file.getName().endsWith(".txt") || file.getName().endsWith(".exe") || file.getName().endsWith(".png")) {
: D$ e) d9 \ i. M - //判断文本框中的输入的是否是找到的文件,如果是就追加到对话框中4 A. h, G; C( }; D E& I+ ]- W! O2 D
- if (textField.getText().equals(file.getName())) {
5 q g. F2 N/ o1 q1 @- m - JOptionPane.showMessageDialog(null, file.getAbsolutePath(), "找到了", 3);
/ K m5 t0 I; n+ n" Q$ d& y - return;
% U5 V4 r" j8 A5 B$ Z8 | - }
% t9 P8 K% ^( P! ?( c, Z - textArea.append(file.getPath() + "\n");
1 Z+ X: ]; B" i - }
4 A1 c5 i( n1 P - }' l X3 v+ G; ?9 E; |* l
- }2 H- [7 {4 r7 ?
- }" @/ Z9 M# I, B4 q3 I# B
- }
! j. I7 t: O- X/ U$ O/ V - }
: m" m6 X: v0 ~( A- l: ^
复制代码 |
|