package 多线程复制文件2; import java.io.File; import 多线程复制文件2.Copy.ThreadCopyFile; public class Main { public static void main(String[] args) { // 获取文件的长度 把文件分成3块 long filelength = new File(ThreadCopyFile.path).length(); long size = filelength / 3; // 定义3个线程 // for (int i = 0; i < 3; i++) { // new ThreadCopyFile(i * size, (i + 1) * size).start(); // } ThreadCopyFile thread0 = new ThreadCopyFile(0, size); thread0.start(); ThreadCopyFile thread1 = new ThreadCopyFile(size, 2 * size); thread1.start(); ThreadCopyFile thread2 = new ThreadCopyFile(2 * size, filelength); thread2.start(); } }
package 多线程复制文件2; import java.io.FileInputStream; import java.io.InputStream; import java.io.RandomAccessFile; public class Copy { public static class ThreadCopyFile extends Thread { static String path = "C:\\Users\\CM\\Desktop\\a.avi"; String topath = "C:\\Users\\CM\\Desktop\\a_附件.avi"; private long from; // 复制起始位置 private long to; // 复制结束位置 public ThreadCopyFile(long from, long to) { this.from = from; this.to = to; } public void run() { try { InputStream in = new FileInputStream(path); //用字节流复制文件 RandomAccessFile out = new RandomAccessFile(topath, "rw"); in.skip(from); // 跳一定的字节后再开始读取 out.seek(from); // 从一定字节后开始写入 long sum = 0; // 统计读取了多少个字节数 byte[] b = new byte[1024 * 1024]; int len = 0; //读取的字节数必须有数量限制 限制小于 to 和from 的差 while ((len = in.read(b)) != -1 && sum <= (to - from)) { out.write(b, 0, len); sum += len; } in.close(); out.close(); System.out.println(Thread.currentThread().getName() + " 复制完成"); } catch (Exception e) { e.printStackTrace(); } } } }
package 多线程复制文件; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; public class CopyThread extends Thread{ private String srcPath; private String destPath; private int start, end; public CopyThread(String srcPath, String destPath, int start, int end) { //要复制的源文件路径 this.srcPath = srcPath; //复制到的文件路径 this.destPath = destPath; //复制起始位置 this.start = start; //复制结束位置 this.end = end; } public void run() { try { RandomAccessFile in = new RandomAccessFile(srcPath, "r"); RandomAccessFile out = new RandomAccessFile(destPath, "rw"); // 将输入跳转到指定位置 in.seek(start); // 从指定位置开始写 out.seek(start); FileChannel inChannel = in.getChannel(); FileChannel outChannel = out.getChannel(); //锁住需要操作的区域 FileLock lock = outChannel.lock(start, (end-start), false); // inChannel.transferTo(position, count, outChannel); 或: outChannel.transferFrom(inChannel, start, (end-start)); //释放锁 lock.release(); out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } } }
package 多线程复制文件; import java.io.File; public class Main { public static void main(String[] args) { //要复制的源文件路径 String srcPath = "C:\\Users\\CM\\Desktop\\a.avi"; // String destPath = "C:\\Users\\CM\\Desktop\\a_复件.avi"; // 获得源文件长度 File f = new File(srcPath); long len = f.length(); int count = 3;// 需要的线程数 //强制转换成int类型 int oneNum = (int) (len / count); for (int i = 0; i < count - 1; i++) { CopyThread ct = new CopyThread(srcPath, destPath, oneNum * i,oneNum * (i + 1)); ct.start(); } CopyThread ct = new CopyThread(srcPath, destPath, oneNum * (count-1),(int)len); ct.start(); } }
多线程复制文件的两个方法:
多线程复制文件2 和 多线程复制文件
1.多线程复制文件2是用字节流的方式
利用byte[] b = new byte[1024 * 1024]加快传输速度;
2.多线程复制文件用FileChannel,文件复制效率高;
相关推荐
Java 单线程复制文件和使用RandomAccessFile多线程复制文件的比较,对应博客地址为http://blog.csdn.net/zmichealchow/article/details/38687431
8*8的国际象棋上有八个皇后他们不能在同一行。同一列和斜对角和java中用多线程复制文件
java多线程复制文件
改小程序主要练习: 1、文件夹非递归遍历 2、文件操作,实现对文件的复制 3、多线程复制文件 4、线程互斥(临界区) 5、MFC非模态对话框的创建和销毁
多线程 复制文件 冒泡排序 群聊
C++实现多线程文件复制.docx
程序“使用线程复制文件”用临界区;来同步线程。 结果不理想,这次使用事件来同步线程。
Delphi多线程实现文件拷贝, 自己写的,代码很规范。
一个多线程的文件拷贝工具的实现,文件操作接口使用了内存映射模型的方式实现,可以指定线程数量,可以在拷贝过程中查看整体的进度信息(进度、速度、剩余时间、已用时间),同时可以查看每个子线程对应的进度信息。...
C#多线程复制代码: 1.运用线程和线程池的知识 2.可以实现 限制线程的数量 进行上传 3.用到FileStream类的读写功能 总之 大家可以参考一下!
java多线程复制文件的实例代码,需要的朋友可以参考一下
本程序的功能为利用Windows标准多线程函数实现多线程文件复制。
使用C实现多线程进行文件复制,在VC++6.0中可以运行
RichCopy 可帮助你大量的复制文件,在较慢的网络中尤其适用。如果你只是复制少量的大文件,RichCopy将不能很好的提高传输的性能。但如果是复制大批量的小文件,RichCopy将使用多线程来大大缩短传输时间。据用户反馈...
基于c++的多线程拷贝技术。基于c++的多线程拷贝技术,包括实现流程和源代码程序。基于c++的多线程拷贝技术。
Qt 负责文件的读写 qml负责显示进度,文件读写在子线程中进行。代码可以直接运行。
该程序的功能为利用MFC的多线程类CWinThread实现多线程文件复制。
delphi多线程互斥操作共享文件,多个EXE,多进程多线程操作工程文件。新手推荐。
Java实现多线的文件复制(界面)。 可以选择复制文件的路径,和复制到某处的路径。可以选择线程数量。
多线程文件备份源码 项目描述 开发环境:VS2008 技术特点:多线程 功能描述:根据选择的目录,然后选择备份路径..该程序会根据选择目录的文件夹结构复制并且过滤文件到备份路径. 如果某一文件夹下的文件非常多的话,...