黑马程序员技术交流社区
标题:
合并文件的疑问
[打印本页]
作者:
hanyahui
时间:
2012-12-29 12:05
标题:
合并文件的疑问
package y12.m12.d27;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;
public class MergeFile {
private static final int SIZE = 1048576;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
//要合并的文件夹
File dir=new File("d:\\partfiles");
mergeFile(dir);
}
private static void mergeFile(File dir) throws IOException {
// TODO 自动生成的方法存根
//读取配置文件
File[] files=dir.listFiles(new SuffixFilter(".properties"));
if(files.length!=1)
{
throw new RuntimeException(dir+",给目录下没有properties文件或者文件不唯一");
}
//原则上只有一个配置文件
File configfile=files[0];
Properties prop=new Properties();
//关联配置文件
FileInputStream fis=new FileInputStream(configfile);
//加载
prop.load(fis);
//读取值和键
String filename=prop.getProperty("filename");
int count=Integer.parseInt(prop.getProperty("partcount"));
//用过滤器选择指定的文件
File[] partFiles=dir.listFiles(new SuffixFilter(".part"));
//碎片文件的个数是总数减去配置文件数,也就是 ”总数-1“
if(partFiles.length!=(count-1))
{
throw new RuntimeException("碎片文件 不符合要求,个数不对!应该是"+count+"个");
}
//定义集合
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
//为什么用count会抛异常
for(int x=0;x<partFiles.length;x++)
{
//添加碎片文件到集合
al.add(new FileInputStream(partFiles[x]));
}
Enumeration<FileInputStream> en=Collections.enumeration(al);
//序列流
SequenceInputStream sis=new SequenceInputStream(en);
//指定输出的路径和名字
FileOutputStream fos=new FileOutputStream(new File(dir,filename));
//写
int len=0;
byte[] buf=new byte[SIZE];
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}
复制代码
把x<partFiles.length换成x<count 为什么会抛异常,我记得老师说可以换的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2