--> 这里用到两种方法...其实也不算两种,就一点点不一样而已...

---> Test 测试类

package com.dragon.java.multithreadcopy;

import java.io.File;
import java.util.Scanner; /*
* 利用多线程复制文件1
*/
public class Test {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("请输入文件路径:");
File srcFile = new File(scanner.next());
System.out.println("请输入线程数:");
int n = scanner.nextInt();
if (!srcFile.exists()) {
System.out.println("该文件不存在!");
} File desFile = new File(srcFile.getParent(), "new" + srcFile.getName());

     // 从线程数得到每个线程要复制的数据大小
long partLenghth = srcFile.length() / n + 1;
for (int i = 1; i < n + 1; i++) {
       // 每次复制的开始和结束位置
new MyThread(srcFile, desFile, partLenghth * (i - 1), partLenghth
* i).start(); }
}
}

--> MyThread类即线程实现类

package com.dragon.java.multithreadcopy;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile; public class MyThread extends Thread {
private File srcFile;
private File desFile;
private long start;
private long end; MyThread() {
super();
}

   // 构造方法传入源文件、目标文件、本次开始位置以及结束位置
MyThread(File srcFile, File desFile, long start, long end) {
super();
this.srcFile = srcFile;
this.desFile = desFile;
this.start = start;
this.end = end;
} @Override
public void run() {
RandomAccessFile rafSrc = null;
RandomAccessFile rafDes = null;
try {
rafSrc = new RandomAccessFile(srcFile, "r");
rafDes = new RandomAccessFile(desFile, "rw");

       // 将文件指针移动到将要开始复制的位置
rafSrc.seek(start);
rafDes.seek(start); int len = -1;
byte[] buffer = new byte[64];
while ((len = rafSrc.read(buffer)) != -1) {
rafDes.write(buffer, 0, len);
          // 当读取到的位置大于或等于要结束的位置时跳出循环
if (rafSrc.getFilePointer() >= end) {
break;
}
}
} catch (IOException e) {
System.out.println(e);
}
} }

--> -----------------------------------------------------------------------邪恶的分割线----------------------------------------------------------------------------

--> Test测试

import java.util.Scanner;

/*
* 利用多线程复制文件利用多线程复制文件2
*/
public class Test {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("请输入文件路径:");
File srcFile = new File(scanner.next());
System.out.println("请输入线程个数:");
int n = scanner.nextInt();
if (!srcFile.exists()) {
System.out.println("该文件不存在!");
} File desFile = new File(srcFile.getParent(), "new" + srcFile.getName());
long partLenghth = srcFile.length() / n + 1;
for (int i = 1; i < n + 1; i++) {
       
// 每次传入单线程复制的长度
new MyThread(srcFile, desFile, partLenghth, MyThread.getPointer())
.start();
}
}
}

--> MyThread线程实现类

 package com.dragon.java.newthreadcopy;

 import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile; public class MyThread extends Thread {
private File srcFile;
private File desFile;
private long partLength;
private static long pointer = 0; MyThread() {
super();
} MyThread(File srcFile, File desFile, long partLength, long pointer) {
super();
this.srcFile = srcFile;
this.desFile = desFile;
this.partLength = partLength;
MyThread.pointer = pointer;
} @Override
public void run() {
RandomAccessFile rafSrc = null;
RandomAccessFile rafDes = null;
try {
rafSrc = new RandomAccessFile(srcFile, "r");
rafDes = new RandomAccessFile(desFile, "rw"); rafSrc.seek(pointer);
rafDes.seek(pointer);

         // 一次性复制完整的一部分长度
byte[] buffer = new byte[(int) partLength];
int len = rafSrc.read(buffer);
rafDes.write(buffer, 0, len);
pointer = rafSrc.getFilePointer();
} catch (IOException e) {
System.out.println(e);
}
} public static long getPointer() {
return pointer;
}
}

--> 感觉第二种也完全是多余的啊,就是一种方法...

Java-->多线程复制(文件指针)的更多相关文章

  1. jAVA基础 提高文件复制性能之多线程复制文件

    利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...

  2. JAVA多线程读写文件范例

    在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...

  3. Java多线程下载文件

    package com.test.download;   import java.io.File; import java.io.InputStream; import java.io.RandomA ...

  4. JAVA实现复制文件夹

    package com.filetest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impor ...

  5. java 多线程下载文件 以及URLConnection和HttpURLConnection的区别

    使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...

  6. Java实现复制文件或者文件夹

    拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等. 话不多说直接上代码 import java.io.*; /** * 实现文件的拷贝 */ public cl ...

  7. java 多线程下载文件并实时计算下载百分比(断点续传)

    多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...

  8. Java 多线程查找文件中的内容

    学过了操作系统,突然不知道多线程有什么用了. 看了一下百度,发现多线程,可以提升系统利用率 在系统进行IO操作的时候,CPU可以处理一些其他的东西,等IO读取到内存后,CPU再处理之前的操作. 总之可 ...

  9. java多线程下载文件和断点下载

    多线程,断点下载文件 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; impor ...

  10. 最新---java多线程下载文件

    import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...

随机推荐

  1. weblogic热部署问题

    最近部署的项目在weblogic10上面.按说10已经支持热部署了,但是为什么我每次修改的jsp,不生效,必须重启服务器呢?这样太耽误时间了,后来发现我的weblogic.xml里的servlet-r ...

  2. C#编程

    C#最完整的webservice实例 http://fyinthesky.blog.163.com/blog/static/3555251720110115227337/ C# WinForm 实践开 ...

  3. TDBGridEh的 搜索面板 TDBGridSearchPanel

    TCustomDBGridEh.Create FSearchPanelControl := TDBGridSearchPanelControlEh.Create(Self); //这里,创建的构造函数 ...

  4. [转][C/C++]函数名字修饰(Decorated Name)方式

    1.C/C++函数修饰名: 对于我们的C/C++源程序而言,函数名只是函数的一小部分,函数还有调用方式(参数入栈方式).返回值类型.参数个数和各参数类型等信息,对于C++类成员函数,还有更多信息.这些 ...

  5. Google https服务被屏蔽

    根据Google透明度报告显示,从上周(5月27日)开始,Google的部分服务开始被屏蔽,其中最主要的是HTTPS搜索服务和Google登录服务,所有版本的Google都受到影响,包括Google. ...

  6. 从github上面拷贝源码

    http://www.cnblogs.com/xing901022/p/4287064.html

  7. MongoDB的安装、配置服务(转)

      一,简介  MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.  MongoDB是一个高性能,开源,无模式的文档型数据库,是当前 ...

  8. ThinkPHP查询数据与CURD

    一.创建连接 在配置文件中使用如下配置: /* 数据库设置 */ 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服 ...

  9. UVa 10318 Security Panel

    题意:给你一个3*3的翻转模版,深色部分表示翻转,浅色部分不变.然后你可以在r*c的矩形里依照模版进行翻转,要求所有点亮所有块.输出最小的步骤. 思路:有一点比较好想.每个块至多被翻转一次,翻两次的效 ...

  10. 虚拟机安装Linux系统图文教程

    虚拟机安装Linux系统图文教程 | 浏览:523 | 更新:2014-09-16 15:31 1 2 3 4 5 6 7 分步阅读 Linux系统的安装 工具/原料 VMware 9.0 虚拟机 L ...