最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java將文件分割為多個子文件再將子文件合并成原始文件的示例

 更新時間:2017年02月03日 15:53:03   作者:4舍318  
本篇文章主要介紹了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文件中,循環(huán)此操作直到文件讀取完畢 
    */ 
 
    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轉(zhuǎn)換為int型 
     
     
    //將keySet迭代出來,轉(zhuǎn)換成int類型的set,排序后存儲進(jìn)去 
    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); 
 
        //循環(huán)讀取文件 --> 依次寫入 
 
        InputStream eachFileInput = null; 
         
        eachFileInput = new FileInputStream(new File(filePath)); 
         
        byte[] buffer = new byte[1024*1024*1];//緩沖區(qū)文件大小為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;//該文件流用于存儲文件分割后的相關(guān)信息,包括分割后的每個子文件的編號和路徑,以及未分割前文件名 
    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);//將相關(guān)信息存儲進(jìn)properties 
      targetFile = new File(targetFilePath); 
      ops = new FileOutputStream(targetFile);//分割后文件 
      ops.write(buffer,0,tempLength);//將信息寫入碎片文件 
 
      ops.close();//關(guān)閉碎片文件 
    } 
    partInfo.setProperty("name",sourceFile.getName());//存儲源文件名 
    partInfo.store(configOps,"ConfigFile");//將properties存儲進(jìn)實(shí)體文件中 
    ips.close();//關(guān)閉源文件流 
  } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java 中程序內(nèi)存的分析

    詳解Java 中程序內(nèi)存的分析

    這篇文章主要介紹了詳解Java 中程序內(nèi)存的分析的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題

    解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題

    這篇文章主要介紹了解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實(shí)現(xiàn)單鏈表反轉(zhuǎn)的多種方法總結(jié)

    Java實(shí)現(xiàn)單鏈表反轉(zhuǎn)的多種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)單鏈表反轉(zhuǎn)的多種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java檢測線程中斷狀態(tài)的方法示例

    Java檢測線程中斷狀態(tài)的方法示例

    這篇文章主要介紹了Java檢測線程中斷狀態(tài)的方法,結(jié)合實(shí)例形式分析了java針對線程中斷狀態(tài)檢測的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • MyBatis在Spring環(huán)境下的事務(wù)管理

    MyBatis在Spring環(huán)境下的事務(wù)管理

    MyBatis的設(shè)計思想很簡單,可以看做是對JDBC的一次封裝,并提供強(qiáng)大的動態(tài)SQL映射功能。這篇文章主要介紹了MyBatis在Spring環(huán)境下的事務(wù)管理 ,需要的朋友可以參考下
    2019-07-07
  • mybatis 加載配置文件的方法(兩種方式)

    mybatis 加載配置文件的方法(兩種方式)

    這篇文章主要介紹了mybatis 加載配置文件的方法,通過實(shí)例代碼給大家介紹了mybatis 加載配置文件的兩種方式,需要的朋友可以參考下
    2017-12-12
  • 十種JAVA排序算法實(shí)例

    十種JAVA排序算法實(shí)例

    本文件講了十種JAVA排序方法(冒泡(Bubble)排序——相鄰交換 、選擇排序——每次最小/大排在相應(yīng)的位置 、插入排序——將下一個插入已排好的序列中 、殼(Shell)排序——縮小增量 、歸并排序 、快速排序 、堆排序 、拓?fù)渑判?、錦標(biāo)賽排序 、基數(shù)排序)的使用,并提供了實(shí)例代碼可參考
    2013-11-11
  • 使用chatgpt實(shí)現(xiàn)微信聊天小程序的代碼示例

    使用chatgpt實(shí)現(xiàn)微信聊天小程序的代碼示例

    這篇文章主要介紹了使用chatgpt實(shí)現(xiàn)微信聊天小程序(秒回復(fù)),文中有詳細(xì)的代碼示例,對大家了解chatgpt聊天有一定的幫助,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • 詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    本篇文章主要介紹了SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦),非常具有實(shí)用價值,需要的朋友可以參考下
    2017-10-10
  • Springboot項(xiàng)目中定時任務(wù)的四種實(shí)現(xiàn)方式詳解

    Springboot項(xiàng)目中定時任務(wù)的四種實(shí)現(xiàn)方式詳解

    Spring的@Scheduled注解是一種非常簡單和便捷的實(shí)現(xiàn)定時任務(wù)的方式,通過在方法上添加@Scheduled注解,我們可以指定方法在特定的時間間隔或固定的時間點(diǎn)執(zhí)行,本文給大家介紹Springboot項(xiàng)目中定時任務(wù)的四種實(shí)現(xiàn)方式,感興趣的的朋友一起看看b
    2024-02-02

最新評論

云南省| 德令哈市| 卓资县| 邮箱| 辉南县| 中牟县| 庐江县| 栾川县| 商河县| 富阳市| 射阳县| 林周县| 双牌县| 长丰县| 常州市| 昌江| 宜良县| 濮阳县| 平原县| 高邑县| 华蓥市| 浦江县| 板桥市| 达尔| 韩城市| 阳东县| 霞浦县| 康马县| 肥东县| 衡阳市| 乌拉特前旗| 高清| 呼和浩特市| 抚顺县| 汨罗市| 建昌县| 万源市| 乌拉特中旗| 施甸县| 都安| 临海市|