Java I/O 字节流练习

要求:将一个文件拆分成多个小文件,然后再将这几个小文件合并成原来的文件。

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();
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43788459/article/details/84947094