实现文件的分割
思路:
读取需要被分割的文件,将该文件以n份读取到不同的临时文件中。
int index=1;
//每个读取100KB
int len=-1;
byte[] buf=new byte[1024*100];
while((len=fis.read(buf))!=-1) {
//创建FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:/test2/"+index+".tmp");
//将读取的100KB数据写入.tmp的临时文件
fos.write(buf,0,len);
index++;
//关闭fos
fos.close();
}
fis.close();
}
实现文件合并
封装被分割文件的目录,过滤掉不需要的文件得到所有被分割的文件。
遍历文件目录,读入临时文件数据,追加写入到合并后的文件。
//获得需要合并的所有tmp文件
//创建File对象,封装tmp文件所在的目录
File dir=new File("D:/test2");
File[] listFiles = dir.listFiles(new FilenameFilter() {
//完成dir目录下文件的过滤
//参数name表示dir目录下的所有文件和目录的名字
@Override
public boolean accept(File dir, String name) {
/**
* 通过返回值true或者false可以控制name表示的文件
* 是否添加到返回值数组中
* */
if(name.endsWith(".tmp"))
return true;
return false;
}
});
//创建FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:/test2/5.png",true);
for(File f:listFiles) {
//创建FileInputStream对象,读入临时文件数据
FileInputStream fis=new FileInputStream(f);
//声明数组保存临时文件数据
byte[] buf=new byte[1024*100];
//读取临时文件100KB数据
int len = fis.read(buf);
//将临时文件中的数据写入到合并后的文件
fos.write(buf,0,len);
//删除临时文件
fis.close();
boolean delete = f.delete();
System.out.println("delete="+delete);
}