java 拆分文件 合并文件

拆分文件

在我文件目录下的的一个文件
在这里插入图片描述
拆分后

在这里插入图片描述
合并后

在这里插入图片描述

具体代码 + 详细注释

package com.java.ioFileTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileLiu {
	
	/**
	 * 本方法是学习中测试使用  请忽略 
	 * 具体内容  在下面方法
	 * @throws IOException
	 */
	public static void du() throws IOException 
	{
		//突然想学一下算远运算符嵌套
		int a=78;
		String chengji=(a<60) ? "不及格":(a<80) ? "良好":"优秀";//实用
		System.out.println(chengji);
		
		File f=new File("D:\\javaTest\\test\\app.txt");
		FileInputStream str=new FileInputStream(f);
		FileOutputStream sor=new FileOutputStream(f);
		//创建字节数组,其长度就是文件的长度
		byte[]all=new byte[(int)f.length()];
		byte data[] = { 88, 89 };
        //以字节流的形式读取文件所有内容
        str.read(all);
        for (byte b : all) {
            //打印出来是65 66
            System.out.println(b);
        }
        
        //每次使用完流,都应该进行关闭
        str.close();
        sor.write(data);
        sor.close();
		
	}
	
	//文件拆分%%%%%%%%%%%%%%%%%
	public static void cahifen() throws IOException 
	{
		File f=new File("D:\\javaTest\\test\\app.txt");
		FileInputStream str=new FileInputStream(f);
		int len=-1;//初始化   //这个len很重要,设定的目的是为了记录每次在读取文件的时候,究竟读了多长
		int number=0;
		int size=102400;//102400字节 ==100k 就是每次读取100字节
		byte a[]=new byte[size];//初始化字节数组
		while((len=str.read(a))!=-1) //每次读102400字节范围的内容 返回实际内容长度 //合并的文件  具体情况具体分析 我这里  是5个文件  使用时可自行设计FOR循环
		{
			File hf=new File("D:\\javaTest\\test\\app-"+number+".txt");//每次的新文件名字  字符串串接起来命名
			FileOutputStream sto=new FileOutputStream(hf);//out流  建立
			sto.write(a,0,len);//写入
			//原来的时候用的是fos.write(a),这样每次不管读了多少,写入都是整个a数组,这样到了文件末端,如果长度不足a数组,而全部写入,就会出现一部分垃圾数据
            //所以用fos.write(a,0,len)就可以保证最后写入的时候,跟读过来的长度是一样的,保证数据的纯净。
			number++;
            //编号数字再加1
            sto.close();
		}
		str.close();
	}
	
	//合并文件%%%%%%%%%%%%%%%%%%
	
	public static void hebing() throws IOException 
	{
		File end=new File("D:\\javaTest\\test\\end.txt");
		FileOutputStream out=new FileOutputStream(end);
		int len=-1;//初始化   //这个len很重要,设定的目的是为了记录每次在读取文件的时候,究竟读了多长
		int size=102400;  //102400字节 ==100k 就是每次读取100字节
		byte a[]=new byte[size];  //初始化字节数组
		if(!end.exists()) //判断文件是否存在  不存在的话 完成下面操作
		{
			end.getParentFile().mkdirs();//查看父文件夹是否存在 不存在会自动创建
			end.createNewFile();//文件创建
		}
		//循环文件 
		for(int i=0;i<5;i++)//合并的文件  具体情况具体分析 我这里  是5个文件  使用时可自行设计FOR循环
		{
			File hf=new File("D:\\javaTest\\test\\app-"+i+".txt");
			FileInputStream in=new FileInputStream(hf);//输入流
			while((len=in.read(a))!=-1)//每次读取a数组范围的内容   实际内容长度赋值给len   方便下面写入文件  ==-1就是读完了
			{
				out.write(a,0,len);//每次写入实际的长度,有优化了程序
			}
			
			in.close();//每次循环读取不同的文件 所以在循环结束时关闭流  循环开始时创建int流
		}
		out.close();//out输出流全部写入一个文件  所以循环结束时关闭
		System.out.println("合并结束");
	}
	public static void main(String[] args) {
		try {
			chaifen();//拆分方法调用
			hebing();//合并方法调用
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

请多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值