程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> java實現u盤指定內容的自動復制

java實現u盤指定內容的自動復制

編輯:更多關於編程

    程序的功能是,檢查U盤,並將U盤的內容自動拷貝到系統的某個盤符中。分享給大家,就當作是練習io流的小練習。

    這個小程序的實現方法如下:
    1、程序運行後隔一斷時間就檢查系統的盤符有沒有增加,通過File.listRoots()可獲取系統存在的盤符。
    2、如果盤符增加了,遍歷這個新增加的盤符,用字節流拷貝文件到指定的路徑。

    需要注意的是,由於U盤的內容可能很大,所以拷貝的時候最好指定要拷貝的文件類型,如ppt,doc,txt等等。
    下面是這個小程序的相關代碼:
    在CopyThread類中可以指定要復制的文件類型,大家在fileTypes數組中加入相應的文件後綴名即可。如果要復制所有文件,將其設為null就行了。在CopyFileToSysRoot類中可以指定存儲的路徑,當然,如果願意的話,你可以將文件上傳到網盤,郵箱等等

    一、USBMain類,程序入口:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class USBMain {
    
    	public static void main(String[] args) {
    		USBMain u = new USBMain();
    		u.launchFrame();
    		//開啟盤符檢查線程
    		new CheckRootThread().start();
    	}
    
    	// 界面
    	private void launchFrame() {
    		final JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setLocation(450, 250);
    		JButton hide = new JButton("點擊隱藏窗口");
    		// 點擊按鈕後隱藏窗口事件監聽
    		hide.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				frame.setVisible(false);
    			}
    		});
    		frame.add(hide);
    		frame.pack();
    		frame.setVisible(true);
    	}
    }

    二、CheckRootThread類,此類用於檢查新盤符的出現,並觸發新盤符文件的拷貝。

    import java.io.File;
    
    //此類用於檢查新盤符的出現,並觸發新盤符文件的拷貝
    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類,用於文件遍歷並選擇指定文件格式進行復制:

    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流實現:

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    //文件復制IO
    public class CopyFileToSysRoot {
    	// 復制文件保存路徑
    	private static final String PATH = "D:USB";
    	private File file = null;
    
    	public CopyFileToSysRoot(File file) {
    		this.file = file;
    	}
    
    	// 復制文件
    	public void doCopy() {
    		BufferedInputStream bis = null;
    		BufferedOutputStream bos = null;
    
    		try {
    			//創建目錄
    			File fPath = new File(getFileParent(file));
    			if (!fPath.exists()) {
    				fPath.mkdirs();
    			}
    
    			bis = new BufferedInputStream(new FileInputStream(file));
    			bos = new BufferedOutputStream(new FileOutputStream(new File(fPath,
    					file.getName())));
    
    			byte[] buf = new byte[1024];
    			int len = 0;
    			while ((len = bis.read(buf)) != -1) {
    				bos.write(buf, 0, len);
    				bos.flush();
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (bis != null)
    					bis.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			try {
    				if (bos != null)
    					bos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	// 根據盤符中文件的路徑,創建復制文件的文件路徑
    	public String getFileParent(File f) {
    		StringBuilder sb = new StringBuilder(f.getParent());
    		int i = sb.indexOf(File.separator);
    		sb.replace(0, i, PATH);
    		return sb.toString();
    	}
    }
    
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved