u盘检测java软件_Java之——U盘检测程序&文件递归

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/53439922

今天,给大家带来一篇由Java实现U盘监测和文件递归的文章,其中代码主要通过File类中的listroots对文件系统进行遍历,比较出盘符的变化,进而通过递归遍历出U盘中的内容。好了,不多说了,我们直接上代码

package com.lyz.disk.test;

import java.io.File;

import java.util.Vector;

/**

* 搜索文件系统的盘符

* @author liuyazhuang

*

*/

public class DiskSearchThread implements Runnable {

/** root 现有文件系统的盘符 */

private File[] roots = File.listRoots();

/** fileVector 为了遍历U盘内文件 */

private VectorfileVector = 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) {

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) {

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.lyz.disk.test;

import java.io.File;

import java.util.Vector;

/**

* 搜索文件的线程

* @author liuyazhuang

*

*/

public class SearchFileThread extends Thread {

private VectorfileVector = null;

private int scanNum = 1;

/** 线程安全的变量,用于退出线程 */

volatile boolean isExist = true;

public SearchFileThread(VectorfileVector) {

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();

}

}

}

/**

* 递归遍历文件

* @param path

*/

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)

isExist = false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
农夫过河问题是一个经典的逻辑问题,它的描述如下: 农夫要把一只狼、一只羊和一棵白菜都带到河的对岸。农夫有一条小船,但船只能容纳农夫和另外一件物品(狼、羊或白菜)。如果农夫不在,狼会吃羊,羊会吃白菜。请用 C 语言编写程序,输出农夫过河的步骤,使得农夫能够安全地把狼、羊和白菜都带到河的对岸。 以下是 C 语言实现的代码: ```c #include <stdio.h> void printState(int farmer, int wolf, int sheep, int cabbage) { printf("%d %d %d %d\n", farmer, wolf, sheep, cabbage); } int isSafe(int farmer, int wolf, int sheep, int cabbage) { if (farmer != wolf && farmer != sheep && farmer != cabbage && wolf != sheep) { return 1; } return 0; } void solve(int farmer, int wolf, int sheep, int cabbage) { if (wolf == 0 && sheep == 0 && cabbage == 0) { printState(farmer, wolf, sheep, cabbage); return; } if (isSafe(farmer, wolf, sheep, cabbage)) { if (farmer == 1) { solve(0, wolf, sheep, cabbage); } else { solve(1, wolf, sheep, cabbage); } } if (farmer == wolf) { if (farmer == 1) { solve(0, 0, sheep, cabbage); } else { solve(1, 1, sheep, cabbage); } } if (farmer == sheep) { if (farmer == 1) { solve(0, wolf, 0, cabbage); } else { solve(1, wolf, 1, cabbage); } } if (farmer == cabbage) { if (farmer == 1) { solve(0, wolf, sheep, 0); } else { solve(1, wolf, sheep, 1); } } } int main() { solve(1, 1, 1, 1); return 0; } ``` 该程序使用递归方式解决农夫过河问题。其中,`printState` 函数用于输出当前状态,`isSafe` 函数用于判断当前状态是否安全,`solve` 函数用于解决问题,其中包括递归过程和状态转移过程。在 `main` 函数中调用 `solve` 函数,并传入初始状态 `(1, 1, 1, 1)`,即农夫、狼、羊和白菜都在河的起点。程序输出的结果即为农夫安全地带着狼、羊和白菜到达河的终点的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值