在大一将近考试的时候,听王金亮王老师讲学生考试作弊的事。其中讲了一个小故事挺有意思,一般教室里都会有一台电脑,老师来上课的时候一般就把自己的课件放在自己U盘里然后带过来,插到电脑里就可以讲课了,然后有学生就想写个程序把老师U盘里的试卷给拷出来。当然老师讲的时候顺便也说了,他的U盘有加固加密啥的,不会被拷出去。这里呢,我就把这个小程序写出来。
思路
- 把文件从U盘拷进电脑,说到底就是文件复制粘贴,不同的是这件事由程序来做。
- 复制粘贴的前提是遍历U盘的所有文件找到合适的,遍历的过程中,如果是文件夹就继续遍历,如果是文件就进行处理。
- 还要考虑的事情是时刻监听是否有U盘插入,如果有U盘插入,立即启动文件复制。
- 然后要考虑的事情是对方U盘里的东西实在太多,太大,在有限时间内如果先复制了无用的东西,就有可能耽误了比较重要的事情。
总结:先看是否插了U盘,插了的话就遍历U盘里的所有文件,查看是否匹配,匹配了就转移到电脑里。
实现
文件拷贝
设置好源文件位置,设置好目的文件位置就可以复制了。
//转移操作
private static void transfer(String sourceDir, String targetDir, String filename) {
try {
File target = new File(targetDir + filename);
File source = new File(sourceDir + filename);
//Files类超级强大
Files.copy(source.toPath(), target.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES);
} catch (Exception e) {
e.printStackTrace();
}
}
监听操作
这个需要事先看好插入U盘之后显示的盘符是什么,如果该盘符存在了,则说明U盘插进来了。然后检查操作每十秒执行一次。
public static void main(String[] args) {
while(true) {
try{
File sourceFile = new File(sourceFileStr);
if(sourceFile.exists()) {
traverse(sourceFile);
break;
}
System.out.println("hello");
Thread.sleep(1000 * 10);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
遍历U盘、匹配文件类型
这里就看文件后缀,如果你想要文档的话,就限定.doc、.docx、.ppt、.xls 、.xlsx等,如果想要图片就找图片的后缀等等。
private static void traverse(File root) {
if (root.isDirectory()) {
File[] qsqList = root.listFiles();
for (File file:qsqList) {
traverse(file);
}
}
else {
String regex = "[\\S]+.doc";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(root.toString());
if (matcher.matches()) {
System.out.println(root.toString());
int index = root.toString().lastIndexOf("/");
String filename = root.toString().substring(index,root.toString().length());
String sourceDir = root.toString().substring(0, index);
transfer(sourceDir, targetFileStr, filename);
}
}
}
最后
好吧,听起来很牛逼,实际上也就这么回事。打完收工~