合并指定文件
private static int collectFile(File dir) throws IOException {
int len;
if(!dir.isDirectory())
{
System.out.println("不是文件!");
return -1;
}
String s=dir.getAbsolutePath();//获得绝对路径
File totle=new File(s+"\\totle.txt");
FileOutputStream fos=new FileOutputStream(totle);
totle.createNewFile();
File[] fs=dir.listFiles();//将子文件变成文件对象存入文件数组中
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for(File f:fs) {
al.add(new FileInputStream(f));//遍历加入集合中
}
Enumeration en=Collections.enumeration(al);
SequenceInputStream sis=new SequenceInputStream(en);//创建序列流对象,
byte[] b=new byte[1024];
while((len=sis.read(b))!=-1) {
fos.write(b,0,len);
}
fos.close();
sis.close();
return 0;
}
切割文件
private static void splitFile(File f) throws IOException {
System.out.println(f.getParent()+f.getName());
FileInputStream f1=new FileInputStream(f);
int len=0;
int count=0;//用于计数
byte[] b=new byte[1024];
String s=f.getParent()+"\\copyfiles";
File f_c=new File(s);
f_c.mkdirs();//在当前目录下创建一个文件夹,防止太多
while((len=f1.read(b))!=-1)
{
File copy=new File(s+"\\part"+(count++)+".txt");
copy.createNewFile();
FileOutputStream os=new FileOutputStream(copy);
BufferedOutputStream bis=new BufferedOutputStream(os);
bis.write(b);
bis.close();//写完后别忘了关闭流
}
注:如果合并的文件在序列流指定的文件夹中,会变成死循环,原理暂时还不知道,有待考察。