博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
U盘检测程序&文件递归
阅读量:6036 次
发布时间:2019-06-20

本文共 3821 字,大约阅读时间需要 12 分钟。

hot3.png

最近要做一个数据发布的客户端,底层用Mina做通信,自定协议,实现传输。在客户端,模仿现在很流行的U盘助手,对U盘的操作进行检测。贴点儿小用例,部分想法来源于互联网,自己小改了下。代码主要通过File类中的listroots对文件系统进行遍历,比较出盘符的变化,进而通过递归遍历出U盘中的内容。

package com.a2.desktop.example1.files.iterator;import java.io.File;import java.util.Vector;/** *  * @author Chen.Hui * @since 2012-10-22 U盘检测程序 */public class DiskSearchThread implements Runnable {	/** root 现有文件系统的盘符 */	private File[] roots = File.listRoots();	/** fileVector 为了遍历U盘内文件 */	private Vector
fileVector = new Vector
(); volatile boolean sign = false; SearchFileThread t = null; public DiskSearchThread() { } @Override public void run() { System.out.println("Checking System..."); while (true) { File[] tempFiles = File.listRoots(); fileVector.removeAllElements(); /** 检测到了有U盘插入 */ if (tempFiles.length > roots.length) { for (int i = tempFiles.length - 1; i >= 0; i--) { sign = false; for (int j = roots.length - 1; j >= 0; j--) { /** 如果前后比较的盘符相同 */ if (tempFiles[i].equals(roots[j])) { sign = true; } } /** 如果前后比较的盘符不相同,将不相同的盘符写入向量,并做进一步处理 */ if (sign == false) { fileVector.add(tempFiles[i]); } } roots = File.listRoots(); t = new SearchFileThread(fileVector); t.start(); } else { for (int i = roots.length - 1; i >= 0; i--) { sign = false; for (int j = tempFiles.length - 1; j >= 0; j--) { if (tempFiles[j].equals(roots[i])) { sign = true; } } /** 如果前后比较的盘符不相同,表明U盘被拔出 */ if (sign == false) { System.out.println("QUIT:" + roots[i].toString()); fileVector.removeAllElements(); t.setIsExistToFalse(); // roots=File.listRoots(); } } roots = File.listRoots(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { new Thread(new DiskSearchThread()).start(); }}

package com.a2.desktop.example1.files.iterator;import java.io.File;import java.util.Vector;/** *  * @author Chen.Hui * @since 2012-10-22 U盘检测程序 */public class SearchFileThread extends Thread {	private Vector
fileVector = null; private int scanNum = 1; /** 线程安全的变量,用于退出线程 */ volatile boolean isExist = true; public SearchFileThread(Vector
fileVector) { this.fileVector = fileVector; System.out.println("fileVector size:" + fileVector.size()); } @Override public void run() { File file = fileVector.elementAt(scanNum - 1); long totalMemory = file.getFreeSpace(); while (isExist) { while (scanNum <= fileVector.size()) { try { System.out.println("search:" + fileVector.elementAt(scanNum - 1).toString() + " Total Space:" + fileVector.elementAt(scanNum - 1).getTotalSpace() / 1024 / 1024 + "MB Free Space:" + fileVector.elementAt(scanNum - 1).getFreeSpace() / 1024 / 1024 + "MB"); /** 遍历文件内容 */ getFiles(fileVector.elementAt(scanNum - 1).getPath()); scanNum++; } catch (Exception e) { e.printStackTrace(); scanNum++; } } /** 如果盘符的大小发生变化,则有文件进出 */ if (totalMemory != file.getFreeSpace()) { System.out.println("文件发生变化----------------------"); getFiles(file.getPath()); totalMemory = file.getFreeSpace(); } } } public void getFiles(String path) { try { File file = new File(path); if (file.isDirectory()) { File[] list = file.listFiles(); for (int i = 0; i < list.length; i++) { if (list[i].isDirectory()) { /** 递归调用 */ getFiles(list[i].getPath()); } System.out.println("Find File:" + list[i].getName()); } } } catch (Exception e) { e.printStackTrace(); } } public synchronized void setIsExistToFalse() { if (isExist == true) isExist = false; }}
没有加界面的,其实可以做个Swing的界面,这样就差不多能做出U盘助手的效果了。

后续主要还是要做Mina的通信,对于通信的代码,会在之后的文章中贴出。

转载于:https://my.oschina.net/ielts0909/blog/84512

你可能感兴趣的文章
01配置管理过程指南
查看>>
jstl格式化时间
查看>>
一则关于运算符的小例
查看>>
centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署
查看>>
cronexpression 详解
查看>>
一周小程序学习 第1天
查看>>
小孩的linux
查看>>
SpringMVC、MyBatis声明式事务管理
查看>>
开发者详解:端游及手游服务端的常用架构
查看>>
JavaScript History对象
查看>>
在 Windows 下安装 Oracle 11g XE (Express Edition)
查看>>
ListView优化
查看>>
【原创】 PostgreSQL 实现MySQL 的auto_increment 字段
查看>>
vs2015添加vc助手
查看>>
检测点1.1
查看>>
android--------阿里 AndFix 热修复
查看>>
control.add()
查看>>
Sublime text3中配置Github
查看>>
备份软件 FreeFileSync 怎么用
查看>>
Asp.net,C# 加密解密字符串
查看>>