Java-使用IO流对大文件进行分割和分割后的合并
Posted 阳光石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-使用IO流对大文件进行分割和分割后的合并相关的知识,希望对你有一定的参考价值。
有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是受到上传文件大小的限制,无法上传,这时我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件。分割后的每个小文件的类型可以自己定义。
以下是我编写的一个大文件的分割和合并的代码:
[java] view plain copy
- package com.lym;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- /**
- * 1、实现一个文件分割器,把一个大文件分割成若干个小文件(可根据情况自行设计),
- * 分割后的文件扩展名为dat,文件名为:原文件名+原扩展名+编号+.dat
- * 2、把分割后的文件再合并(文件还原)成完整文件,与源文件一致。
- * @author lym
- *
- */
- public class Homework2
- /**
- * 文件分割
- * @param src 源文件路径
- * @param fileSize 分割后每个文件的大小,单位是MB
- * @param dest 目标文件路径
- */
- public static void split(String src,int fileSize,String dest)
- if("".equals(src)||src==null||fileSize==0||"".equals(dest)||dest==null)
- System.out.println("分割失败");
- File srcFile = new File(src);//源文件
- long srcSize = srcFile.length();//源文件的大小
- long destSize = 1024*1024*fileSize;//目标文件的大小(分割后每个文件的大小)
- int number = (int)(srcSize/destSize);
- number = srcSize%destSize==0?number:number+1;//分割后文件的数目
- String fileName = src.substring(src.lastIndexOf("\\\\"));//源文件名
- InputStream in = null;//输入字节流
- BufferedInputStream bis = null;//输入缓冲流
- byte[] bytes = new byte[1024*1024];//每次读取文件的大小为1MB
- int len = -1;//每次读取的长度值
- try
- in = new FileInputStream(srcFile);
- bis = new BufferedInputStream(in);
- for(int i=0;i<number;i++)
- String destName = dest+File.separator+fileName+"-"+i+".dat";
- OutputStream out = new FileOutputStream(destName);
- BufferedOutputStream bos = new BufferedOutputStream(out);
- int count = 0;
- while((len = bis.read(bytes))!=-1)
- bos.write(bytes, 0, len);//把字节数据写入目标文件中
- count+=len;
- if(count>=destSize)
- break;
- bos.flush();//刷新
- bos.close();
- out.close();
- catch (FileNotFoundException e)
- e.printStackTrace();
- catch (IOException e)
- e.printStackTrace();
- finally
- //关闭流
- try
- if(bis!=null)bis.close();
- if(in!=null)in.close();
- catch (IOException e)
- e.printStackTrace();
- /**
- * 文件合并
- * 注意:在拼接文件路劲时,一定不要忘记文件的跟路径,否则复制不成功
- * @param destPath 目标目录
- * @param srcPaths 源文件目录
- */
- public static void merge(String destPath,String ... srcPaths)
- if(destPath==null||"".equals(destPath)||srcPaths==null)
- System.out.println("合并失败");
- for (String string : srcPaths)
- java 流操作对文件的分割和合并的实例详解_java - JAVA