java代码实现文件扫描_JAVA实现监听U盘插入 扫描文件

JAVA实现监听U盘插入

想用Java实现监听USB端口是否有移动设备插入,然后操作移动设备内的文件。网站查找资料后发现有个jsr-80的项目,下面先介绍一下什么是JSR:JSR是Java Specification Requests的缩写,意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。—来自百科

那么JSR-80( Java USB API)就是Java规范请求中对USB操作提供API,如何想用Java语言对USB进行操作,可以选用该扩展API。在下一篇博文中,将会介绍JSR-80的使用,本篇博文将用另一种取巧(傻笨)方式对插入设备的文件进行操作。下面说一下要进行的操作有哪些:

1.当检测到有设备插入时,删除设备中的所有文件。

2.当检测到有设备插入时,查找设备中是否有某个指定文件,若有,则关机。

贴上代码,思路和步骤都详细的写在代码的注释中:

import java.io.File;

import java.util.LinkedHashSet;

import java.util.Set;

/*

* 实现当检测到有设备插入时,删除设备中的所有文件,使用生产者消费者模式进行检查和删除

* 1.生产者:在设备插入之前先判断系统开始的盘符数,

* 然后创建一个线程不断判断系统有多少个盘符,若判断出盘符数增多,则该线程等待并唤醒消费者;否则一直判断。

* 2.消费者:在没有判断出有插入设备时,处于等待状态;若有,则将设备中的文件全部删除。

* 3.资源:将插入的设备当作资源

*

*/

public class DelUSBFile {

public static int count = 0;

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

File[] dir = File.listRoots();

count = dir.length;

ResFileByDelFile rf = new ResFileByDelFile(count);

Thread t1 = new Thread(new ProducerUSBRootByDelFile(rf));

Thread t2 = new Thread(new ConsumerUSBRootByDelFile(rf));

t1.start();

t2.start();

}

}

//资源

class ResFileByDelFile {

private int count = 0;

//判断是否有设备插入的标记

private boolean flag = false;

private File[] dirs;

public ResFileByDelFile(int count) {

this.count = count;

}

//递归删除文件

public static void deleteDir(File dir) {

File[] file = dir.listFiles();

if (file != null) {

for (File f : file) {

if (f.isDirectory()) {

deleteDir(f);

} else {

System.out.println(f + ":" + f.delete());

}

}

}

System.out.println(dir + ":" + dir.delete());

}

//查找资源--生产者使用

public synchronized void searchFile() {

//如果flag为true,说明检测出有设备插入,则等待;

//如果flag为false,说明没有设备插入

if (flag) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

dirs = File.listRoots();

//一但有设备插入,当前盘符数会大于系统一开始的盘符数

if (dirs.length > count) {

flag = true;

notify();

}

}

//消费资源--消费者使用

public synchronized void delFile() {

if (!flag) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (dirs.length > count) {

for (int i = count; i < dirs.length; i++) {

deleteDir(dirs[i]);

}

flag = false;

notify();

}

}

}

//消费者

class ConsumerUSBRootByDelFile implements Runnable {

private ResFileByDelFile rf = null;

public ConsumerUSBRootByDelFile(ResFileByDelFile rf) {

this.rf = rf;

}

@Override

public void run() {

// TODO Auto-generated method stub

while (true) {

rf.delFile();

}

}

}

//生产者

class ProducerUSBRootByDelFile implements Runnable {

private ResFileByDelFile rf = null;

public ProducerUSBRootByDelFile(ResFileByDelFile rf) {

this.rf = rf;

}

@Override

public void run() {

// TODO Auto-generated method stub

while (true) {

rf.searchFile();

}

}

}

接下来是第二个功能:

import java.io.File;

import java.io.IOException;

import java.util.LinkedHashSet;

import java.util.Set;

/*

* 实现当检测到有设备插入时,查找设备中的所有文件,使用生产者消费者模式进行检查和查找

* 1.生产者:在设备插入之前先判断系统开始的盘符数,

* 然后创建一个线程不断判断系统有多少个盘符,若判断出盘符数增多,则该线程等待并唤醒消费者;否则一直判断。

* 2.消费者:在没有判断出有插入设备时,处于等待状态;若有,则查找设备中是否包含指定文件,有则关机。

* 3.资源:将插入的设备当作资源

*

*/

public class SearchFileShutDown {

public static int count = 0;

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

File[] dir = File.listRoots();

count = dir.length;

ResFileByShutdown rf = new ResFileByShutdown(count);

Thread t1 = new Thread(new ProducerUSBRootByShutdown(rf));

Thread t2 = new Thread(new ConsumerUSBRootByShutdown(rf));

t1.start();

t2.start();

}

}

//资源

class ResFileByShutdown {

private int count = 0;

//判断是否有设备插入的标记

private boolean flag = false;

private File[] dirs;

//保存设备中的文件

private static Set fileSet = new LinkedHashSet();

//要查找的指定文件名

private static final String filename = "1.txt";

public ResFileByShutdown(int count) {

this.count = count;

}

//获取所有文件名

public static void getAllFiles(File dir) throws Exception {

File[] files = dir.listFiles();

if (files != null) {

System.out.println("dir:" + dir);

for (File f : files) {

if (f.isDirectory()) {

getAllFiles(f);

} else {

fileSet.add(f.getName());

System.out.println("file:" + f);

}

}

}

//如果有指定的文件,则10s后关机

if (fileSet.contains(filename)) {

Runtime.getRuntime().exec("shutdown -s -t 10");

}

}

//查找资源--生产者使用

public synchronized void searchFile() {

if (flag) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

dirs = File.listRoots();

if (dirs.length > count) {

flag = true;

notify();

}

}

//消费资源--消费者使用

public synchronized void delFile() {

if (!flag) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (dirs.length > count) {

for (int i = count; i < dirs.length; i++) {

try {

getAllFiles(dirs[i]);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// count = dirs.length;

flag = false;

notify();

}

}

}

//消费者

class ConsumerUSBRootByShutdown implements Runnable {

private ResFileByShutdown rf = null;

public ConsumerUSBRootByShutdown(ResFileByShutdown rf) {

this.rf = rf;

}

@Override

public void run() {

// TODO Auto-generated method stub

while (true) {

rf.delFile();

}

}

}

//生产者

class ProducerUSBRootByShutdown implements Runnable {

private ResFileByShutdown rf = null;

public ProducerUSBRootByShutdown(ResFileByShutdown rf) {

this.rf = rf;

}

@Override

public void run() {

// TODO Auto-generated method stub

while (true) {

rf.searchFile();

}

}

}

标签:count,dirs,JAVA,U盘,监听,插入,rf,File,public

来源: https://blog.csdn.net/lljj888/article/details/88975133

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值