前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java开发_快速搜索本地文件_小应用程序

java开发_快速搜索本地文件_小应用程序

作者头像
Hongten
发布2018-09-13 15:39:28
1.2K0
发布2018-09-13 15:39:28
举报
文章被收录于专栏:HongtenHongten

先来看看效果:

这是一个Application运行效果

然后我突发奇想,我之前做过一个Application叫做:java开发_java小程序_邮死你(yousini)_源码下载

为什么不去修改它的源代码,把这个功能实现在一个桌面应用程序中去呢?

就这样有一个java小程序就这样诞生啦....

==========================================================

代码部分:

==========================================================

上面的Application代码:

代码语言:javascript
复制
 1 /**
 2  * 
 3  */
 4 package com.b510;
 5 
 6 import java.io.File;
 7 import java.util.Date;
 8 
 9 public class ThreadDemo implements Runnable {
10     // 要统计的磁盘路径
11     private String path;
12 
13     // 构造方法
14     public ThreadDemo(String path) {
15         this.path = path;
16     }
17 
18     // 主方法
19     public static void main(String[] args) {
20         // 得到根目录
21         File[] root = File.listRoots();
22         System.out.println("所有目录:");
23         for (int i = 0; i < root.length; i++) {
24             System.out.println(root[i].getAbsolutePath());
25         }
26         System.out.println("=====================================");
27         for (int i = 0; i < root.length; i++) {
28             System.out.println("开始处理:" + root[i].getAbsolutePath() + " 目录...");
29             // 创建线程对象
30             ThreadDemo td = new ThreadDemo(root[i].getAbsolutePath());
31             new Thread(td).start();
32         }
33     }
34 
35     // 重写run方法
36     public void run() {
37         long start = new Date().getTime();
38         int num = countFile(path);
39         long end = new Date().getTime();
40         System.out.println(path + "统计共有" + num + "个文件!共耗时:[" + (end - start) + "]ms");
41     }
42 
43     // 统计文件数目的方法
44     public int countFile(String path) {
45         int count = 0;
46         File file = new File(path);
47         // 得到该目录下的所有文件
48         File[] subFile = file.listFiles();
49         // 如果该目录为空或
50         if (null == subFile || subFile.length == 0) {
51             return count;
52         }
53         for (int i = 0; i < subFile.length; i++) {
54             if (subFile[i].isDirectory()) {
55                 // System.out.println(subFile[i].getAbsolutePath());
56                 count += countFile(subFile[i].getAbsolutePath());
57             } else if (subFile[i].isFile()) {
58                 if (getPostfix(subFile[i].getName()).equals("gif")) {
59                     System.out.println("文件名称:" + subFile[i].getAbsolutePath());
60                 }
61                 count++;
62             }
63         }
64         return count;
65     }
66 
67     /**
68      * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>
69      * 
70      * @param inputFilePath
71      * @return
72      */
73     public String getPostfix(String inputFilePath) {
74         return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
75     }
76 
77 }

下面的桌面应用程序代码:

主要参考:java开发_java小程序_邮死你(yousini)_源码下载

我把修改的类的代码贴出来:(其实就修改了两个类 ^_^)

/SearchFiles/src/com/b510/sendmail/main/SendMailMain.java

代码语言:javascript
复制
 1 package com.b510.sendmail.main;
 2 
 3 import com.b510.sendmail.ui.SendMailUI;
 4 
 5 /**
 6  * @author Hongten
 7  * 
 8  * @time 2012-4-4 2012
 9  */
10 public class SendMailMain {
11     public static void main(String[] args) {
12         SendMailUI sendMailUI = new SendMailUI("MySearchFileUtil v1.0");
13     }
14 }

/SearchFiles/src/com/b510/sendmail/ui/SendMailUI.java

代码语言:javascript
复制
  1 package com.b510.sendmail.ui;
  2 
  3 import java.awt.Graphics;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.awt.event.WindowAdapter;
  7 import java.awt.event.WindowEvent;
  8 
  9 import javax.swing.ImageIcon;
 10 import javax.swing.JFrame;
 11 import javax.swing.JOptionPane;
 12 import javax.swing.JPanel;
 13 
 14 import com.b510.sendmail.utils.AboutSendmail;
 15 
 16 /**
 17  * 
 18  * @author Hongten
 19  */
 20 public class SendMailUI extends JFrame implements ActionListener {
 21 
 22     public static javax.swing.JTextArea infoShow;
 23     private javax.swing.JScrollPane jScrollPane1;
 24     private javax.swing.JPanel mainPanel;
 25     private javax.swing.JMenuBar menuBar;
 26     private javax.swing.JButton send;
 27     private javax.swing.JProgressBar showTime;
 28     private javax.swing.JTextField targetmail;
 29     javax.swing.JMenu fileMenu;
 30     javax.swing.JMenuItem exitMenuItem;
 31     javax.swing.JMenu helpMenu;
 32     javax.swing.JMenuItem aboutMenuItem;
 33     private static boolean flag;
 34     private static int number = 266;
 35     private int i = 0;
 36     private AboutSendmail aboutSendmail;
 37     /**
 38      * 定义图盘图盘标志
 39      */
 40     public boolean iconed = false;
 41     /** 定义托盘 */
 42     MyTray myTray;
 43 
 44     /**
 45      * 版本号
 46      */
 47     private static final long serialVersionUID = -6601825053136983041L;
 48 
 49     public SendMailUI(String title) {
 50         this.setTitle(title);
 51         init();
 52     }
 53 
 54     /**
 55      * 主界面初始化
 56      */
 57     public void init() {
 58 
 59         mainPanel = new JPanel() {
 60             private static final long serialVersionUID = 1L;
 61 
 62             protected void paintComponent(Graphics g) {
 63                 ImageIcon icon = new ImageIcon("src/resources/mail_bg.png");
 64                 g.drawImage(icon.getImage(), 0, 0, 700, 430, null);
 65             }
 66         };
 67 
 68         targetmail = new javax.swing.JTextField();
 69         send = new javax.swing.JButton();
 70         jScrollPane1 = new javax.swing.JScrollPane();
 71         infoShow = new javax.swing.JTextArea();
 72         menuBar = new javax.swing.JMenuBar();
 73         fileMenu = new javax.swing.JMenu();
 74         exitMenuItem = new javax.swing.JMenuItem();
 75         helpMenu = new javax.swing.JMenu();
 76         aboutMenuItem = new javax.swing.JMenuItem();
 77         // 设置为0到180,即180s,3分钟
 78         showTime = new javax.swing.JProgressBar(0, number);
 79         aboutSendmail = new AboutSendmail("关于软件");
 80         aboutSendmail.setVisible(false);
 81 
 82         // 是否在进度条上显示字符
 83         showTime.setStringPainted(true);
 84 
 85         mainPanel.setName("mainPanel"); // NOI18N
 86 
 87         targetmail.setName("targetmail"); // NOI18N
 88         // targetmail.setText("hongtenzone@foxmail.com");
 89 
 90         send.setText("search"); // NOI18N
 91         send.setName("search"); // NOI18N
 92         send.setEnabled(false);
 93         send.addActionListener(this);
 94 
 95         jScrollPane1.setName("jScrollPane1"); // NOI18N
 96 
 97         infoShow.setColumns(20);
 98         infoShow.setRows(5);
 99         infoShow.setName("infoShow"); // NOI18N
100         jScrollPane1.setViewportView(infoShow);
101         // 初始化布局
102         initComponent();
103 
104         menuBar.setName("menuBar"); // NOI18N
105 
106         fileMenu.setName("fileMenu"); // NOI18N
107         fileMenu.setText("file");
108 
109         exitMenuItem.setText("exit");
110         fileMenu.add(exitMenuItem);
111         exitMenuItem.addActionListener(this);
112 
113         menuBar.add(fileMenu);
114 
115         helpMenu.setText("help"); // NOI18N
116         helpMenu.setName("helpMenu"); // NOI18N
117 
118         aboutMenuItem.setText("about");
119         helpMenu.add(aboutMenuItem);
120         aboutMenuItem.addActionListener(this);
121 
122         menuBar.add(helpMenu);
123 
124         this.add(mainPanel);
125         setJMenuBar(menuBar);
126 
127         this.setVisible(true);
128         this.setSize(700, 485);
129         // 启动进度条记时监听器
130         timeCardListener();
131         // 启动邮箱输入框监听器
132         myListener();
133         // this.pack();
134         this.setLocationRelativeTo(null);
135         this.setResizable(false);
136         // this.setLocation(470, 250);
137         // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
138         // 当点击"-"最小化按钮时,系统会最小化到托盘
139         addWindowListener(new WindowAdapter() {
140             public void windowIconified(WindowEvent e) {
141                 iconed = true;
142                 setVisible(false);
143             }
144 
145             public void windowClosing(WindowEvent e) {
146                 // 当点击"X"关闭窗口按钮时,会询问用户是否要最小化到托盘
147                 // 是,表示最小化到托盘,否,表示退出
148                 int option = JOptionPane.showConfirmDialog(SendMailUI.this, "是否最小化到托盘?", "提示:", JOptionPane.YES_NO_OPTION);
149                 if (option == JOptionPane.YES_OPTION) {
150                     iconed = true;
151                     SendMailUI.this.setVisible(false);
152                 } else {
153                     System.exit(0);
154                 }
155             }
156         });
157         // 初始化自定义托盘
158         myTray = new MyTray(SendMailUI.this);
159 
160     }
161 
162     /**
163      * 布局文件,没有必要去管他
164      */
165     private void initComponent() {
166         javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
167         mainPanel.setLayout(mainPanelLayout);
168         mainPanelLayout.setHorizontalGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
169                 mainPanelLayout
170                         .createSequentialGroup()
171                         .addGap(52, 54, 54)
172                         .addGroup(
173                                 mainPanelLayout
174                                         .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
175                                         .addGroup(
176                                                 mainPanelLayout.createSequentialGroup().addComponent(targetmail, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
177                                                         .addGap(34, 34, 37).addComponent(send))
178                                         .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 620, javax.swing.GroupLayout.PREFERRED_SIZE)
179                                         .addGroup(
180                                                 mainPanelLayout.createSequentialGroup().addGap(463, 463, 463)
181                                                         .addComponent(showTime, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
182                         .addContainerGap(30, Short.MAX_VALUE)));
183         mainPanelLayout.setVerticalGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
184                 mainPanelLayout
185                         .createSequentialGroup()
186                         .addContainerGap()
187                         .addGroup(
188                                 mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(send)
189                                         .addComponent(targetmail, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(30, 43, 43)
190                         .addComponent(showTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
191                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
192                         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 313, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(15, 15, 15)));
193     }
194 
195     // 进度条记时
196     public void timeCard(final boolean flag) {
197         new Thread(new Runnable() {// 设置一个线程
198                     public void run() {
199                         if (flag) {
200                             while (i < number) {
201                                 try {
202                                     Thread.sleep((long) (1000 * 7.7));
203                                 } catch (Exception e) {
204                                     e.printStackTrace();
205                                 }
206                                 showTime.setValue(i++);
207                             }
208                         } else {
209                             i = 0;
210                             showTime.setValue(0);
211 
212                         }
213                     }
214                 }).start();
215     }
216 
217     // 进度条记时
218     public void timeCardListener() {
219         new Thread(new Runnable() {// 设置一个线程
220                     public void run() {
221                         while (true) {
222                             try {
223                                 Thread.sleep((long) (1000 * 7.7));
224                             } catch (Exception e) {
225                                 e.printStackTrace();
226                             }
227                             timeCard(flag);
228                         }
229                     }
230                 }).start();
231     }
232 
233     @Override
234     public void actionPerformed(ActionEvent e) {
235         if (e.getSource() == send) {
236             infoShow.append("请耐心等待...\n");
237             new SendMail().sendMailListener(targetmail.getText());
238         }
239         // 退出程序
240         if (e.getSource() == exitMenuItem) {
241             System.exit(0);
242         }
243         if (e.getSource() == aboutMenuItem) {
244             aboutSendmail.setVisible(true);
245         }
246     }
247 
248     class SendMail {
249         public void sendMailListener(final String targetmail) {
250             new Thread(new Runnable() {// 设置一个线程
251                         public void run() {
252                             while (true) {
253                                 try {
254                                     // 线程处于睡眠的时候,flag=true;
255                                     Thread.sleep(1);
256                                 } catch (Exception e) {
257                                     e.printStackTrace();
258                                 }
259                                 MySearchUtil.beginSearch(targetmail);
260                                 try {
261                                     // 等待timeCardListener监听器监听时间
262                                     Thread.sleep(1000000000);
263                                 } catch (Exception e) {
264                                 }
265                             }
266                         }
267 
268                     }).start();
269         }
270     }
271 
272     // 邮箱输入框是否正确填写
273     public void changedUpdate() {
274         String mail = targetmail.getText();
275         send.setEnabled(true);
276         if (mail.equals("")) {
277             send.setEnabled(false);
278         } else if (mail.length() > 0) {
279             // 输入内容不为空,且是能够匹配邮箱,那么设置send可用
280             send.setEnabled(true);
281         } else {
282             send.setEnabled(true);
283         }
284     }
285 
286     /**
287      * 邮箱是否填写完整监听器
288      */
289     public void myListener() {
290         new Thread(new Runnable() {// 设置一个线程
291                     public void run() {
292                         while (true) {
293                             try {
294                                 Thread.sleep(500);
295                             } catch (Exception e) {
296                                 e.printStackTrace();
297                             }
298                             changedUpdate();// 填写邮箱
299                         }
300                     }
301                 }).start();
302     }
303 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档