<span style="font-size:18px;">package com.io.other.split;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class SplitFileTest {
/**
* 文件分割器。
* 一个读取流,相应多个输出流。并且生成的碎片文件都有有序的编号
* @param args
* @throws IOException
*/
private static final int DEFAULT_SIZE=1024*2;
public static void main(String[] args) throws IOException {
File srcFile=new File("chen\\11.avi");
File destDir=new File("chen\\partfiles");
SplitFile(srcFile,destDir);
}
/**
*
* @param srcFile
* @throws IOException
*/
public static void SplitFile(File srcFile,File destDir) throws IOException {
if (!srcFile.exists()) {
throw new RuntimeException(srcFile.getAbsolutePath()+",源文件不存在");
}
if(!destDir.exists()){
destDir.mkdirs();
}
//1、定义一个源文件
FileInputStream fis=new FileInputStream(srcFile);
//2、创建目的引用
FileOutputStream fos=null;
//3、创建一个缓冲区存储数据
byte[] buf=new byte[DEFAULT_SIZE];
int len=0;
int count=0;
while((len=fis.read(buf))!=-1){
//创建输出流,并明白要写入的文件
File partFile=new File(destDir,(++count)+".part");
fos=new FileOutputStream(partFile);
fos.write(buf, 0, len);
fos.close();
}
//在产生碎片文件时,须要产生一个配置文件。记录碎片的个数和源文件名称字
//partfile=n;filename=11.avi
//配置文件里存储的键值信息。使用Properties集合
Properties prop=new Properties();
prop.setProperty("partcount", Integer.toString(count));
prop.setProperty("filename", srcFile.getName());
File conFile=new File(destDir,(++count)+".properties");
fos=new FileOutputStream(conFile);
//关闭资源
fos.close();
fis.close();
}
}
</span>