Java将文件分割为多个子文件再将子文件合并成原始文件的示例

Java将文件分割为多个子文件再将子文件合并成原始文件的示例,废话不多说,代码如下:

import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.Set; 

public class Test
{
  public static void main(String[] args) throws Exception
  {
    /*
    *将一个文件分割为多个文件,然后再组合成一个文件
    * 找到文件,读入一个1M的buffer中,然后写入一个Part文件中,循环此操作直到文件读取完毕
    */ 

    String sourceFilePath = "D:" + File.separator + "Code" + File.separator + "source" + File.separator + "031316_【第13章:Java类集】_属性类:Properties.wmv";
    int partFileLength = 1024*1024;//指定分割的子文件大小为1M
    splitFile(sourceFilePath,partFileLength);//将文件分割
    combineFile("D:" + File.separator + "Code" + File.separator + "target");//将分割后的文件合并
  } 

  public static void combineFile(String directoryPath) throws Exception
  {
    Properties config = new Properties();
    InputStream ips = null;
    ips = new FileInputStream(new File(directoryPath + File.separator + "config.properties"));
    config.load(ips); 

    Set keySet = config.keySet();//需要将keySet转换为int型 

    //将keySet迭代出来,转换成int类型的set,排序后存储进去
    Set<Integer> intSet = new TreeSet<Integer>();
    Iterator iterString = keySet.iterator();
    while(iterString.hasNext())
    {
      String tempKey = (String)iterString.next();
      if("name".equals(tempKey))
      {}
      else
      {
        int tempInt ;
        tempInt = Integer.parseInt(tempKey);
        intSet.add(tempInt);
      }
    } 

    Set<Integer> sortedKeySet = new TreeSet<Integer>();
    sortedKeySet.addAll(intSet); 

    OutputStream eachFileOutput = null;
    eachFileOutput = new FileOutputStream(new File("D:" + File.separator + "Code" + File.separator + config.getProperty("name"))); 

    Iterator iter = sortedKeySet.iterator();
    while(iter.hasNext())
    {
      String key = new String("" + iter.next());
      if(key.equals("name"))
      {}
      else
      {
        //System.out.println("debug---");
        String fileNumber = null;
        String filePath = null;
        fileNumber = key;
        filePath = config.getProperty(fileNumber); 

        //循环读取文件 --> 依次写入 

        InputStream eachFileInput = null; 

        eachFileInput = new FileInputStream(new File(filePath)); 

        byte[] buffer = new byte[1024*1024*1];//缓冲区文件大小为1M
        int len = 0;
        while((len = eachFileInput.read(buffer,0,1024*1024*1)) != -1)
        {
          eachFileOutput.write(buffer,0,len);
        }
        eachFileInput.close();
      }
    } 

    eachFileOutput.close();
  } 

  public static void splitFile(String sourceFilePath,int partFileLength) throws Exception
  {
    File sourceFile = null;
    File targetFile = null;
    InputStream ips = null;
    OutputStream ops = null;
    OutputStream configOps = null;//该文件流用于存储文件分割后的相关信息,包括分割后的每个子文件的编号和路径,以及未分割前文件名
    Properties partInfo = null;//properties用于存储文件分割的信息
    byte[] buffer = null;
    int partNumber = 1;
    sourceFile = new File(sourceFilePath);//待分割文件
    ips = new FileInputStream(sourceFile);//找到读取源文件并获取输入流
    configOps = new FileOutputStream(new File("D:" + File.separator + "Code" //配置文件
      + File.separator + "target" + File.separator + "config.properties"));
    buffer = new byte[partFileLength];//开辟缓存空间
    int tempLength = 0;
    partInfo = new Properties();//key:1开始自动编号 value:文件路径 

    while((tempLength = ips.read(buffer,0,partFileLength)) != -1)
    {
      String targetFilePath = "D:" + File.separator + "Code"
        + File.separator + "target" + File.separator + "part_" + (partNumber);//分割后的文件路径+文件名
      partInfo.setProperty((partNumber++)+"",targetFilePath);//将相关信息存储进properties
      targetFile = new File(targetFilePath);
      ops = new FileOutputStream(targetFile);//分割后文件
      ops.write(buffer,0,tempLength);//将信息写入碎片文件 

      ops.close();//关闭碎片文件
    }
    partInfo.setProperty("name",sourceFile.getName());//存储源文件名
    partInfo.store(configOps,"ConfigFile");//将properties存储进实体文件中
    ips.close();//关闭源文件流
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现大文件分割与合并的实例代码

    复制代码 代码如下: package com.test; import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.FileNotFoundException;  import java.io.FileReader;  import java.io.FileWriter;  import java.io.IOException;  import java.util.Collections;  im

  • java 中用split分割字符串,最后的空格等不被拆分的方法

    在使用java中的split按照"\t",拆分字符串的时候,发现如果最后的几个字段是空,只是用\t分割,是连着的\t的话,就不会被分割,如 "d\tc\te\t\t\t"最后的几个\t就不会被分割,应该是在拆分之前对字符串进行了处理. 导致的拆分字段个数错误.查了一下APi,需要在split中添加参数-1,String[] values = line.split("\t",-1); imit 参数控制应用模式的次数,从而影响结果数组的长度 如果限

  • java分割日期时间段代码

    本文实例为大家分享了java切割日期时间段代码,供大家参考,具体内容如下 /** * @author dy * @since 2016-09-18 & JDK 1.8.0_91 */ public class DateCalculate { static Logger logger = LoggerFactory.getLogger(DateCalculate.class); /** * 切割时间段 * * @param dateType 交易类型 M/D/H/N -->每月/每天/每小时/

  • java将图片分割为几个部分示例

    以下代码使用java将图片分割为几个部分,大家参考使用吧 复制代码 代码如下: public class SegmentationImage{ public static Icon Segmentation(String imagename,int Width,int Height,int height,int width) throws Exception{  // 准备分割图片 BufferedImage img1=ImageIO.read(new File(imagename));   

  • Java 分割字符串详解及实例代码

     Java 分割字符串 java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 public class StringSplit { public static void main(String[] args) { String sourceStr = "1,2,3,4,5"; String[] sourceStrArray = sourceSt

  • java 分割csv数据的实例详解

    java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分割方法: 实现代码: public static String[] split(String line) { List<String> list = new ArrayList<>(); int start = 0; int end = -1; while(true) { start

  • Java实现文件分割和文件合并实例

    文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来). 找了好多博客,本来想转载一个来的 结果找不到了.很无奈. 只好自己贴代码上了. 当然我会尽力好好写注释的. 文件切割器: import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; public c

  • java正则表达式四种常用的处理方式(匹配、分割、替代、获取)

    java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式 * 正则表达式 的用法主要是4种方面的使用 * 匹配,分割,替换,获取. * 用一些简单的符号来代表代码的操作 * @author cyc * */ public class Rex { public static void ma

  • Java 使用IO流实现大文件的分割与合并实例详解

    Java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分开复制, 最后把三个文件合并, 这样就解决问题了 :再比如说, 你有一个上百M的文件要上传到FTP ,但是这个FTP限制你单个文件不能超过10M 这时候也可以用文件分割的办法解决问题.既然分割了,那么在我们再次使用的时候就需要合并了,今天我们就通过Java

  • Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例

    一:工具栏(JToolBar) 代码示例: 复制代码 代码如下: import javax.swing.*; //工具栏的使用案例 public class JToolBarDemo2_jigloo extends javax.swing.JFrame { private JToolBar myJToolBar;  private JButton jB_file;  private JButton jB_edit;  private JButton jB_tools;  private JBut

  • java 流操作对文件的分割和合并的实例详解

    java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代码: package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.ut

随机推荐