您的位置:首页 > 编程语言 > Java开发

文件的分割和合并

2016-01-06 04:02 465 查看
文件切割器

public class Io52_1 {
private static final int SiZE = 1024*1024;

public static void main(String[] args) throws IOException {
File file=new File("E:\\Io\\10.mp3");
splitFile(file);
}

public static void splitFile(File file) throws IOException{

//用读取流关联源文件。
FileInputStream fis=new FileInputStream(file);

//定义一个1M的缓冲区
byte[] buf=new byte[SiZE];

//创建目的
FileOutputStream fos=null;
int len=0;
int count=1;
File dir=new File("E:\\partfiles");
if(!dir.exists()){
dir.mkdirs();
}

while((len=fis.read(buf))!=-1){
fos=new FileOutputStream(new File(dir,(count++)+".part"));

fos.write(buf, 0, len);

}

fis.close();
fos.close();
}

}


文件合并

public class Io53_1 {
public static void main(String[] args) throws IOException {
File dir=new File("E:\\partfiles");
mergeFile(dir);
}

public static void mergeFile(File dir) throws IOException{

ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();

for(int x=1;x<=9;x++){
a1.add(new FileInputStream(new File(dir,x+".part")));
}
Enumeration<FileInputStream> en=Collections.enumeration(a1);
SequenceInputStream sis=new SequenceInputStream(en);

FileOutputStream fos=new FileOutputStream(new File(dir,"10.mp3"));

byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf, 0, len);
}

fos.close();
sis.close();
}
}


文件合并

public class Io53_1 {
public static void main(String[] args) throws IOException {
File dir=new File("E:\\partfiles");
mergeFile(dir);
}

public static void mergeFile(File dir) throws IOException{

ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();

for(int x=1;x<=9;x++){
a1.add(new FileInputStream(new File(dir,x+".part")));
}
Enumeration<FileInputStream> en=Collections.enumeration(a1);
SequenceInputStream sis=new SequenceInputStream(en);

FileOutputStream fos=new FileOutputStream(new File(dir,"10.mp3"));

byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf, 0, len);
}

fos.close();
sis.close();
}
}


文件切割合并+配置文件

public class Io54_1 {
private static final int SiZE = 1024*1024;
public static void main(String[] args) throws IOException {
/*      File file=new File("E:\\Io\\5.mp3");
splitFile_2(file);*/

File dir=new File("E:\\partfiles");
mergeFile_2(dir);
}

//切割文件方法
public static void splitFile_2(File file) throws IOException{

//用读取流关联源文件。
FileInputStream fis=new FileInputStream(file);

//定义一个1M的缓冲区
byte[] buf=new
4000
byte[SiZE];

//创建目的
FileOutputStream fos=null;
int len=0;
int count=1;

/*
* 切割文件时,必须记录住被切割文件的名称,以及
* 切割出来碎片文件的个数,以方便合并。
*
* **/

File dir=new File("E:\\partfiles");
if(!dir.exists()){
dir.mkdirs();
}

while((len=fis.read(buf))!=-1){
fos=new FileOutputStream(new File(dir,(count++) + ".part"));

fos.write(buf, 0, len);
fos.close();
}
Properties prop=new Properties();

//将被切割文件的信息保存到prop集合中。
prop.setProperty("partcount", count+"");
prop.setProperty("filename", file.getName());

fos=new FileOutputStream(new File(dir,count+".properties"));

//将prop集合中的数据存储到集合中
prop.store(fos, "save file info");

fis.close();
fos.close();
}

//合并文件的方法
public static void mergeFile_2(File dir) throws IOException{
/*
*
* 获取指定目录下的配置文件对象=============
* */

File[] files=dir.listFiles(new SuffixFileter(".properties"));

if(files.length!=1){
throw new RuntimeException(dir+",该目录下没有propertise的文件,或者不唯一");
}
//配置文件对象
File confie=files[0];

//获取该文件中的信息============================

Properties prop=new Properties();
FileInputStream fis=new FileInputStream(confie);

prop.load(fis);
String filename=prop.getProperty("filename");

int count =Integer.parseInt(prop.getProperty("partcount"));

//获取该目录下的所有碎片文件==============
File[] partFiles=dir.listFiles(new SuffixFileter(".part"));

if(partFiles.length!=(count-1)){
throw new RuntimeException("碎片文件不符合要求,个数不对"+count+"个");
}

//将碎片文件和流对象关联并存储到集合中=============
ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();
for(int x=1;x<partFiles.length;x++){
a1.add(new FileInputStream(partFiles[x]));
}

//将多个流合并成一个序列流=============
Enumeration<FileInputStream> en=Collections.enumeration(a1);
SequenceInputStream sis=new SequenceInputStream(en);

FileOutputStream fos=new FileOutputStream(new File(dir,filename));

byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf, 0, len);
}

fos.close();
sis.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java