在大一將近考試的時候枫攀,聽王金亮王老師講學(xué)生考試作弊的事。其中講了一個小故事挺有意思禽笑,一般教室里都會有一臺電腦,老師來上課的時候一般就把自己的課件放在自己U盤里然后帶過來蛤奥,插到電腦里就可以講課了佳镜,然后有學(xué)生就想寫個程序把老師U盤里的試卷給拷出來。當(dāng)然老師講的時候順便也說了凡桥,他的U盤有加固加密啥的蟀伸,不會被拷出去。這里呢缅刽,我就把這個小程序?qū)懗鰜怼?/p>
思路
- 把文件從U盤拷進(jìn)電腦啊掏,說到底就是文件復(fù)制粘貼,不同的是這件事由程序來做衰猛。
- 復(fù)制粘貼的前提是遍歷U盤的所有文件找到合適的迟蜜,遍歷的過程中,如果是文件夾就繼續(xù)遍歷啡省,如果是文件就進(jìn)行處理娜睛。
- 還要考慮的事情是時刻監(jiān)聽是否有U盤插入,如果有U盤插入卦睹,立即啟動文件復(fù)制畦戒。
- 然后要考慮的事情是對方U盤里的東西實在太多,太大结序,在有限時間內(nèi)如果先復(fù)制了無用的東西障斋,就有可能耽誤了比較重要的事情。
總結(jié):先看是否插了U盤笼痹,插了的話就遍歷U盤里的所有文件配喳,查看是否匹配,匹配了就轉(zhuǎn)移到電腦里凳干。
實現(xiàn)
文件拷貝
設(shè)置好源文件位置晴裹,設(shè)置好目的文件位置就可以復(fù)制了。
//轉(zhuǎn)移操作
private static void transfer(String sourceDir, String targetDir, String filename) {
try {
File target = new File(targetDir + filename);
File source = new File(sourceDir + filename);
//Files類超級強(qiáng)大
Files.copy(source.toPath(), target.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES);
} catch (Exception e) {
e.printStackTrace();
}
}
監(jiān)聽操作
這個需要事先看好插入U盤之后顯示的盤符是什么救赐,如果該盤符存在了涧团,則說明U盤插進(jìn)來了。然后檢查操作每十秒執(zhí)行一次经磅。
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);
}
}
}
最后
好吧待逞,聽起來很牛逼甥角,實際上也就這么回事。打完收工~