要求:将一个文件拆分成多个小文件,然后再将这几个小文件合并成原来的文件。
package cn.hcd.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class IOCopyDemo {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
Scanner sc = new Scanner(System.in);
fis = new FileInputStream("E:/kgc/jixieshou.png");
// fis = new FileInputStream("E:/kgc/宪法.txt");
double d = (double)(fis.available())/1024;
String s = String.format("%.1f", d);
System.out.println("该文件大小为"+Double.valueOf(s)+"KB");
System.out.println("请问您要分为几个文件?");
int num = sc.nextInt();
int size = fis.available()/num;
//将一个大文件复制,并拆分成若干个小文件
byte [] b = new byte [size];
for(int i=0;i<num;i++){
fis.read(b);
File file = new File("F:/KGC/part-"+i+".png");
// File file = new File("F:/KGC/part-"+i+".txt");
fos = new FileOutputStream(file); //不必用file.createNewFile()创建,这句代码本身就会创建文件
fos.write(b, 0, b.length);
}
System.out.println("已经将文件拆分成"+num+"个小文件");
//将拆分开的几个小文件再合成一个大文件
fos = new FileOutputStream(new File("F:/KGC/jixieshou.png"),true);
// fos = new FileOutputStream(new File("F:/KGC/宪法.txt"),true);
byte [] bb = new byte[size];
for(int i=0;i<num;i++){
FileInputStream fis2 = new FileInputStream("F:/KGC/part-"+i+".png");
// FileInputStream fis2 = new FileInputStream("F:/KGC/part-"+i+".txt");
int len;
while((len = fis2.read(bb)) != -1){
fos.write(bb, 0, len);
}
}
System.out.println("已经将"+num+"个小文件"+"合成了一个文件");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}