中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中怎么實現文件切片和合并

發布時間:2021-06-25 16:38:17 來源:億速云 閱讀:326 作者:Leah 欄目:編程語言

java中怎么實現文件切片和合并,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

首先建一個SplitUtil工具類,在工具類中有三個方法getSplitFile,getWrite,merge

1,文件拆分代碼

public static void getSplitFile(String file,int count){        //預分配文件所占用的磁盤空間,在磁盤創建一個指定大小的文件,“r”表示只讀,“rw”支持隨機讀寫    try {      RandomAccessFile raf = new RandomAccessFile(new File(file), "r");      //計算文件大小      long length = raf.length();      System.out.println(length);      //計算文件切片后每一份文件的大小      long maxSize = length / count;            System.out.println(maxSize);            long offset = 0L;//定義初始文件的偏移量(讀取進度)      //開始切割文件      for(int i = 0; i < count - 1; i++){ //count-1最后一份文件不處理        //標記初始化        long fbegin = offset;        //分割第幾份文件        long fend = (i+1) * maxSize;        //寫入文件        offset = getWrite(file, i, fbegin, fend);              }            //剩余部分文件寫入到最后一份(如果不能平平均分配的時候)      if (length - offset > 0) {        //寫入文件        getWrite(file, count-1, offset, length);      }          } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();    }      }

2,getWrite文件寫入代碼

/**   * 指定文件每一份的邊界,寫入不同文件中   * @param file 源文件   * @param index 源文件的順序標識   * @param begin開始指針的位置   * @param end 結束指針的位置   * @return long   */  public static long getWrite(String file,int index,long begin,long end){        long endPointer = 0L;    try {      //申明文件切割后的文件磁盤      RandomAccessFile in = new RandomAccessFile(new File(file), "r");      //定義一個可讀,可寫的文件并且后綴名為.tmp的二進制文件      RandomAccessFile out = new RandomAccessFile(new File(file + "_" + index + ".tmp"), "rw");            //申明具體每一文件的字節數組      byte[] b = new byte[1024];      int n = 0;      //從指定位置讀取文件字節流      in.seek(begin);      //判斷文件流讀取的邊界      while(in.getFilePointer() <= end && (n = in.read(b)) != -1){        //從指定每一份文件的范圍,寫入不同的文件        out.write(b, 0, n);      }            //定義當前讀取文件的指針      endPointer = in.getFilePointer();            //關閉輸入流      in.close();      //關閉輸出流      out.close();    } catch (Exception e) {      e.printStackTrace();    }        return endPointer;  }

3.文件合并代碼

/**   * 文件合并   * @param file 指定合并文件   * @param tempFile 分割前的文件名   * @param tempCount 文件個數   */  public static void merge(String file,String tempFile,int tempCount){    RandomAccessFile raf = null;    try {      //申明隨機讀取文件RandomAccessFile      raf = new RandomAccessFile(new File(file), "rw");      //開始合并文件,對應切片的二進制文件      for (int i = 0; i < tempCount; i++) {        //讀取切片文件        RandomAccessFile reader = new RandomAccessFile(new File(tempFile + "_" + i + ".tmp"), "r");        byte[] b = new byte[1024];        int n = 0;        while((n = reader.read(b)) != -1){          raf.write(b, 0, n);//一邊讀,一邊寫        }      }    } catch (Exception e) {      e.printStackTrace();    }finally{      try {        raf.close();      } catch (IOException e) {        e.printStackTrace();      }    }

最后在主程序里面調用就可以了

public static void main(String[] args) {        String file = "F:\\java-study\\img\\mv.jpg";    int count = 5;        //1.根據現有的文件編寫文件編寫文件切片工具類    //2.寫入到二進制臨時文件    //  getSplitFile(file, count);    //3.根據實際的需求合并指定數量的文件    String tempFile = "F:\\java-study\\img\\img.jpg";    merge(file, tempFile, 5); }

關于java中怎么實現文件切片和合并問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南汇区| 诏安县| 普洱| 游戏| 库车县| 泰兴市| 广东省| 通城县| 万州区| 册亨县| 久治县| 清河县| 萨嘎县| 栾川县| 庆云县| 闻喜县| 昆明市| 阳曲县| 凌云县| 雅安市| 射洪县| 香港| 永吉县| 开化县| 和顺县| 五寨县| 龙里县| 淮南市| 井陉县| 马山县| 西丰县| 九龙坡区| 海城市| 连云港市| 灵山县| 临海市| 东山县| 宿松县| 威远县| 武清区| 伊金霍洛旗|