找到一个大于100k的文件,按照100k为单位,拆分成多个子文件,并且以编号作为文件名结束。
public static void main(String[] args) throws FileNotFoundException, IOException {
File f1=new File("F:/test/lol.exe");//待拆分文件的路径
FileInputStream fis=new FileInputStream(f1);
byte[] bf=new byte[102400];
long length=f1.length();
for(int i=0;length>=0;i++) {
//最后小于一百k的数据用新建一个字节数组保存
if(length<102400) bf=new byte[(int) length];
fis.read(bf);//读取文件流并存储到bf字节数组里
File f2=new File("F:/test/lol.exe-"+i);
FileOutputStream fos=new FileOutputStream(f2);
fos.write(bf);
length-=102400;
}
}
合并上面步骤拆分的文件。
public static void main(String[] args) throws FileNotFoundException, IOException {
File fr;//待合并文件的存储路径
File fw=new File("F:/test1/lol.exe");//合并文件的存储路径
FileOutputStream fws=new FileOutputStream(fw);
byte[] bf=new byte[102400];
for(int i=0;;i++) {
fr=new File("F:/test/lol.exe-"+i);
if(!fr.exists()) break;
FileInputStream frs=new FileInputStream(fr);
//当读到最后一个文件时,因为该文件的大小可能小于100k,所以需要根据其大小建立新的byte[]来存数据
if(fr.length()<102400) bf=new byte[(int) fr.length()];
while(frs.read(bf)!=-1) {
fws.write(bf);
}
}
}