java习题3 合并和切割文件

合并文件

public class Demo18 {
/*
* 序列流:把多个输入流的内容一次性的打印(操作)—字节流
*/
public static void main(String[] args) throws IOException {
//创建三个输入流
FileInputStream fileInputStream1 = new FileInputStream(“src\com\qf\test\Demo2.java”);
FileInputStream fileInputStream2 = new FileInputStream(“src\com\qf\test\Demo2.java”);
FileInputStream fileInputStream3 = new FileInputStream(“src\com\qf\test\Demo1.java”);

	//将三个输入流放入序列流
	//方式一:先放入一个Vector

// Vector vector = new Vector<>();
// vector.add(fileInputStream1);
// vector.add(fileInputStream2);
// vector.add(fileInputStream3);
//
// //得到枚举器
// Enumeration e1 = vector.elements();

	//方式二:先放入一个list
	ArrayList<FileInputStream> list = new ArrayList<>();
	list.add(fileInputStream1);
	list.add(fileInputStream2);
	list.add(fileInputStream3);
	
	//将集合转换成枚举
	Enumeration<FileInputStream> e2 = Collections.enumeration(list);
	
	//创建序列流对象并关联相关的文件--参数是一个枚举器
	//SequenceInputStream sequenceInputStream = new SequenceInputStream(e1);
	SequenceInputStream sequenceInputStream = new SequenceInputStream(e2);
	
	//创建输出流
	FileOutputStream fileOutputStream = new FileOutputStream("temp2.txt");
	
	//读写  
	byte[] arr = new byte[1024];
	int num;
	while ((num = sequenceInputStream.read(arr)) != -1) {
		fileOutputStream.write(arr, 0, num);
		
		fileOutputStream.flush();
	}
	
	sequenceInputStream.close();
	fileOutputStream.close();
	
	
}

}

进一步优化

在这里插入图片描述

切割文件 Properties

class Demo5
{
public static void main(String[] args)throws IOException
{
//切割文件
File file=new File(“e:\gp0722\day18\ok.jpg”);
qieGe(file);
}

//切割文件
public static void qieGe(File file)throws IOException
{
     //判断是不是文件
	 if(!file.isFile())
		 return;

	 //创建一个目录,目录用来存放切割出来的文件
	 File dir = new File("qiege");
	 if(!dir.exists())
		 dir.mkdir();

	 //怎么切:每读够2M的数据写入到一个新的文件
	 FileInputStream fis = new FileInputStream(file);

	 FileOutputStream fos = null;//因为写入到不同的文件,所以不能new

	 byte[] arr=new byte[1024*1024*2];//读够2M就切割
	 int len=0;
	 int num=1;
	 while((len=fis.read(arr))!=-1){
	 
	      fos=new FileOutputStream(new File(dir,(num++)+".suipian")); // File(File f,String s)
		  fos.write(arr,0,len);
	 }



	 //附加一些说明信息:文件的类型,文件的个数
	 Properties  pro=new Properties();//Map

	 pro.setProperty("fileType",file.getName());

	 pro.setProperty("fileNumber",Integer.toString(--num));

	 //把Properties中的键值对写入到文件
     fos=new FileOutputStream(new File(dir,"readme.txt"));
   //store  后面的写上  会进行编码  不写 就输出一行空格
	 pro.store(fos,"切割文件的说明信息");

	 fis.close();

	 fos.close();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值