拆分文件
在我文件目录下的的一个文件
拆分后
合并后
具体代码 + 详细注释
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();
}
}
}