//此类用于检查新盘符的出现,并触发新盘符文件的拷贝 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]
|