本文主要应用javaIO中字节流,将源文件分割成每份1M,也可以反过来将分割后的文件合并成新的文件(与源文件相同)。
源码如下:
/** * 分割、合并文件 * @author Smilexs */ public class DivideFile { private static final int SIZE = 1024*1024;//每部分的文件大小==1M public static void main(String[] args) { String oriFilePath="F:\\Home.mp3";//原文件 String distDirPath="F:\\Part";//分割文件存放的文件夹 divideFile(oriFilePath,distDirPath); mergeFile(distDirPath, "F:\\home2.mp3");//合并后的新文件 } /** * 对文件进行分割 * @param oriFilePath--原文件位置 * @param distDirPath--目的文件夹位置 */ public static void divideFile(String oriFilePath,String distDirPath){ /**1、简单异常处理*/ if(oriFilePath==null || distDirPath==null){ System.err.println("参数异常"); return; } File oriFile = new File(oriFilePath); File distDir = new File(distDirPath); if(!oriFile.exists() || oriFile.length() < 1024 || distDir.isFile()){ return;//文件不存在,文件大小过小,目的不是文件夹都直接返回 } if(!distDir.exists()){ distDir.mkdir();//创建文件夹 } try { /**2、读取文件*/ FileInputStream fis = new FileInputStream(oriFile); byte[] data = new byte[SIZE];//每部分的文件大小==1M int count =1;//标记第几部分的文件 int len = 0; while((len=fis.read(data))!=-1){ /**3、写文件*/ FileOutputStream fos = new FileOutputStream(distDirPath+"\\part_"+count+".txt"); fos.write(data,0,len); fos.flush(); fos.close(); count++; } System.out.println("分割完成"); fis.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 合并文件 * @param oriDirPath--源 分割的文件所在的文件夹路径 * @param distFilePath --合成的目的文件 */ public static void mergeFile(String oriDirPath,String distFilePath){ /**1、简单异常处理*/ //略!! try { /**2、读文件*/ int count=1; File tempFile =new File(oriDirPath+"\\part_"+count+".txt"); //有文件存在就合并进去 while(tempFile.exists()){ FileInputStream fis = new FileInputStream(tempFile); byte[] data = new byte[SIZE];//每部分的文件大小==1M int len =fis.read(data); /**3、写文件*/ FileOutputStream fos = new FileOutputStream(distFilePath,true); fos.write(data, 0, len); fos.flush(); fos.close(); fis.close(); count++; tempFile =new File(oriDirPath+"\\part_"+count+".txt"); } System.out.println("合并完成"); } catch (Exception e) { e.printStackTrace(); } } }