您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 招标投标 > Java多线程复制文件(转)
2010-03-1201:054126人阅读评论(1)收藏举报多线程javastringbytepackagemastercn;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.RandomAccessFile;publicclassCopyFileimplementsRunnable{//来源文件privateStringsourceFileName;//目标文件privateStringtargetFileName;//分块总数privateintblockCount;//开始COPY的块序号privateintblockNo;//缓存大小privateintmaxBuffSize=1024*1024;/***将sourceFileName文件分blockCount块后的第blockNo块复制至sourceFileName*@paramsourceFileName来源文件全名*@paramtargetFileName目标文件全名*@paramblockCount文件分块COPY数*@paramblockNo开始COPY的块序号*/publicCopyFile(StringsourceFileName,StringtargetFileName,intblockCount,intblockNo){this.sourceFileName=sourceFileName;this.targetFileName=targetFileName;this.blockCount=blockCount;this.blockNo=blockNo;}publicvoidrun(){//得到来源文件Filefile=newFile(sourceFileName);//得到来源文件的大小longsize=file.length();//根据文件大小及分块总数算出单个块的大小longblockLenth=size/blockCount;//算出当前开始COPY的位置longstartPosition=blockLenth*blockNo;//实例化缓存byte[]buff=newbyte[maxBuffSize];try{//从源文件得到输入流InputStreaminputStream=newFileInputStream(sourceFileName);//得到目标文件的随机访问对象RandomAccessFileraf=newRandomAccessFile(targetFileName,rw);//将目标文件的指针偏移至开始位置raf.seek(startPosition);//当前读取的字节数intcurRedLength;//累计读取字节数的和inttotalRedLength=0;//将来源文件的指针偏移至开始位置inputStream.skip(startPosition);//依次分块读取文件while((curRedLength=inputStream.read(buff))0&&totalRedLengthblockLenth){//将缓存中的字节写入文件?目标文件中raf.write(buff,0,curRedLength);//累计读取的字节数totalRedLength+=curRedLength;}//关闭相关资源raf.close();inputStream.close();}catch(Exceptionex){ex.printStackTrace();}}}packagemastercn;publicclassTest{/***@paramargs*///来源文件privatestaticStringsourceFile;//目标文件privatestaticStringtargetFile;//分块数privatestaticintblockCount;publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub//sourceFile=args[0];targetFile=args[1];blockCount=Integer.parseInt(args[2]);//记录开始时间longbeginTime=System.currentTimeMillis();//依次分块进行文件COPYfor(inti=0;iblockCount;i++){//实例化文件复制对象CopyFilecopyFile=newCopyFile(sourceFile,targetFile,blockCount,i);//实例化线程Threadthread=newThread(copyFile);//开始线程thread.start();try{//加入线程thread.join();}catch(Exceptione){//TODO:handleexceptione.printStackTrace();}}//计算耗时longendTime=System.currentTimeMillis();//输出耗时System.out.println(共用时:+(endTime-beginTime)+ms);}}版权声明:本文为博主原创文章,未经博主允许不得转载。
本文标题:Java多线程复制文件(转)
链接地址:https://www.777doc.com/doc-2880893 .html