您现在的位置: 爱51代码网 >> 范文 >> 文章正文
java实现u盘指定内容的自动复制
//此类用于检查新盘符的出现,并触发新盘符文件的拷贝
public class CheckRootThread extends Thread {
 // 获取系统盘符
 private File[] sysRoot = File.listRoots();

 public void run() {
  File[] currentRoot = null;
  while (true) {
   // 当前的系统盘符
   currentRoot = File.listRoots();
   if (currentRoot.length > sysRoot.length) {
    for (int i = currentRoot.length - 1; i >= 0; i--) {
     boolean isNewRoot = true;
     for (int j = sysRoot.length - 1; j >= 0; j--) {
      // 当两者盘符不同时,触发新盘符文件的拷贝
      if (currentRoot[i].equals(sysRoot[j])) {
       isNewRoot = false;
      }
     }
     if (isNewRoot) {
      new CopyThread(currentRoot[i]).start();
     }
    }
   }
   sysRoot = File.listRoots();
   //每5秒时间检查一次系统盘符
   try {
    Thread.sleep(5000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

三、CopyThread类,用于文件遍历并选择指定文件格式进行复制:
[java] view plaincopyprint?
01.import java.io.File; 
02. 
03.//该类用于对新盘符文件的复制  
04.public class CopyThread extends Thread { 
05.    // 设置要复制的文件类型,如果要复制所有格式的文件,将fileTypes设为null即可  
06.    private static String[] fileTypes = {"ppt","doc","txt","wps"}; 
07.    // private static String[] fileTypes = null;  
08. 
09.    File file = null; 
10. 
11.    public CopyThread(File file) { 
12.        this.file = file; 
13.    } 
14. 
15.    public void run() { 
16.        listUsbFiles(file); 
17.    } 
18.     
19.    //遍历盘符文件,并匹配文件复制  
20.    private void listUsbFiles(File ufile) { 
21.        File[] files = ufile.listFiles(); 
22.        for (File f : files) { 
23.            if (f.isDirectory()) { 
24.                listUsbFiles(f); 
25.            } else { 
26.                if (fileTypeMatch(f)) 
27.                    new CopyFileToSysRoot(f).doCopy(); 
28.            } 
29.        } 
30.    } 
31. 
32.    //匹配要复制的文件类型  
33.    public boolean fileTypeMatch(File f) { 
34.        //fileTypes为null时,则全部复制  
35.        if (fileTypes == null) { 
36.            return true; 
37.        } else { 
38.            for (String type : fileTypes) { 
39.                if (f.getName().endsWith("." + type)) { 
40.                    return true; 
41.                } 
42.            } 
43.        } 
44.        return false; 
45.    } 
46.} 
import java.io.File;

//该类用于对新盘符文件的复制
public class CopyThread extends Thread {
 // 设置要复制的文件类型,如果要复制所有格式的文件,将fileTypes设为null即可
 private static String[] fileTypes = {"ppt","doc","txt","wps"};
 // private static String[] fileTypes = null;

 File file = null;

 public CopyThread(File file) {
  this.file = file;
 }

 public void run() {
  listUsbFiles(file);
 }
 
 //遍历盘符文件,并匹配文件复制
 private void listUsbFiles(File ufile) {
  File[] files = ufile.listFiles();
  for (File f : files) {
   if (f.isDirectory()) {
    listUsbFiles(f);
   } else {
    if (fileTypeMatch(f))
     new CopyFileToSysRoot(f).doCopy();
   }
  }
 }

 //匹配要复制的文件类型
 public boolean fileTypeMatch(File f) {
  //fileTypes为null时,则全部复制
  if (fileTypes == null) {
   return true;
  } else {
   for (String type : fileTypes) {
    if (f.getName().endsWith("." + type)) {
     return true;
    }
   }
  }
  return false;
 }
}

四、CopyFileToSysRoot类,复制文件的IO流实现:
[java] view plaincopyprint?
01.import java.io.BufferedInputStream; 
02.import java.io.BufferedOutputStream; 
03.import java.io.File; 
04.import java.io.FileInputStream; 
05.import java.io.FileNotFoundException; 
06.import java.io.FileOutputStream; 
07.import java.io.IOException; 
08. 
09.//文件复制IO  
10.public class CopyFileToSysRoot { 
11.    // 复制文件保存路径  
12.    private static final String PATH = "D:\\USB"; 
13.    private File file = null; 
14. 
15.    public CopyFileToSysRoot(File file) { 
16.        this.file = file; 
17.    } 
18. 
19.    // 复制文件  
20.    public void doCopy() { 
21.        BufferedInputStream bis = null; 
22.        BufferedOutputStream bos = null; 
23. 
24.        try { 
25.            //创建目录  
26.            File fPath = new File(getFileParent(file)); 
27.            if (!fPath.exists()) { 
28.                fPath.mkdirs(); 
29.            } 
30. 
31.            bis = new BufferedInputStream(new FileInputStream(file)); 
32.            bos = new BufferedOutputStream(new FileOutputStream(new File(fPath, 
33.                    file.getName()))); 
34. 
35.            byte[] buf = new byte[1024]; 
36.            int len = 0; 
37.            while ((len = bis.read(buf)) != -1) { 
38.                bos.write(buf, 0, len); 
39.                bos.flush(); 
40.            } 
41.        } catch (FileNotFoundException e) { 
42.            e.printStackTrace(); 
43.        } catch (IOException e) { 
44.            e.printStackTrace(); 
45.        } finally { 
46.            try { 
47.                if (bis != null) 
48.                    bis.close(); 
49.            } catch (IOException e) { 
50.                e.printStackTrace(); 
51.            } 
52.            try { 
53.                if (bos != null) 
54.                    bos.close(); 
55.            } catch (IOException e) { 
56.                e.printStackTrace(); 
57.            } 
58.        } 
59.    } 
60. 
61.    // 根据盘符中文件的路径,创建复制文件的文件路径  
62.    public String getFileParent(File f) { 
63.        StringBuilder sb = new StringBuilder(f.getParent()); 
64.        int i = sb.indexOf(File.separator); 
65.        sb.replace(0, i, PATH); 
66.        return sb.toString(); 
67.    } 
68.} 

上一页  [1] [2] 

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    青少年吸烟心理探析
    保险受益人制度相关问题的探讨
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    一个简单实用的轮播器源代码
    js只能输入数字和小数点的文
    ExtJS & GTGrid 简单用户管理
    设置<img>在表格<table>中的
    Android init进程启动过程分
    应用内购买 In-App Purchase
    Android之Activity的taskAff
    Redis系列-key相关主要操作函
    Redis存储篇sorted set主要操
    把oracle rac 转化为单机数据
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |