A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sixth 中级黑马   /  2012-11-3 21:03  /  1043 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.qimenguigu.lesson420121024.lesson10;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.RandomAccessFile;

/**
* @author Administrator
*
*/
public class Test1 implements Runnable {

// 来源文件
private String sourceFileName;
// 目标文件
private String targetFileName;
// 分块总数
private int blockCount;
// 开始COPY的块序号
private int blockNo;
// 缓存大小
private int maxBuffSize = 1024;

public Test1(String sourceFileName, String targetFileName, int blockCount,
int blockNo) {
this.sourceFileName = sourceFileName;
this.targetFileName = targetFileName;
this.blockCount = blockCount;
this.blockNo = blockNo;
}

public void run() {
// 得到来源文件
File file = new File(sourceFileName);
// 得到来源文件的大小
long size = file.length();
// 根据文件大小及分块总数算出单个块的大小
//System.out.println(size);
long blockLenth = size / blockCount;
// 算出当前开始COPY的位置
long startPosition = blockLenth * blockNo;
//System.out.println(startPosition);
// 实例化缓存

byte[] buff = new byte[maxBuffSize];
try {
// 从源文件得到输入流
InputStream inputStream = new FileInputStream(sourceFileName);
// 得到目标文件的随机访问对象
RandomAccessFile raf = new RandomAccessFile(sourceFileName, "rw");
RandomAccessFile waf = new RandomAccessFile(targetFileName, "rw");
// 将目标文件的指针偏移至开始位置
raf.seek(startPosition);
System.out.println(startPosition);
// 当前读取的字节数
int curRedLength=0;
// 累计读取字节数的和
int totalRedLength = 0;
// 将来源文件的指针偏移至开始位置
inputStream.skip(startPosition);
// 依次分块读取文件
//System.out.println(raf.read());
while ((curRedLength = raf.read(buff)) > 0
&& totalRedLength < blockLenth) {
System.out.println(buff);
//System.out.println("第"+blockNo+"次");
// 将缓存中的字节写入文件?目标文件中
waf.write(buff, 0, curRedLength);
// 累计读取的字节数
totalRedLength += curRedLength;
}
// 关闭相关资源
raf.close();
                        waf.close();
inputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}

public static void main(String[] args) {

for (int i = 0; i < 4; i++) {//四个线程读,分四块
String source="e:/1/23.avi";
String toPath="e:/1/21.avi";
Test1 t = new Test1(source, toPath, 4, i);
Thread th=new Thread(t);
th.start();

}
}

}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马