1. 程式人生 > 程式設計 >Java如何將大檔案切割成小檔案

Java如何將大檔案切割成小檔案

運用Java編寫程式碼將一個大檔案切割成指定大小的小檔案

思路:

對已知檔案進行切割操作 –> 得到多個碎片檔案

使用:

1、 1個位元組輸入流 –> 讀取已知檔案中的資料
2、 多個位元組輸出流 –> 生成多個碎片檔案

思路補充:

建立一個指定大小的byte陣列,將大檔案讀取到byte陣列中,讀滿一次將byte陣列寫入一個新的小檔案中,如此迴圈直到將大檔案讀取完畢

注意:此時最後一個小檔案可能不足規定的記憶體大小,在從大檔案讀取最後一個byte陣列時,可能還沒讀滿byte陣列,大檔案就讀取完畢了,所以只能將最後的未滿足規定記憶體大小byte陣列寫入最後一個檔案中;

具體程式碼如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class CutDemo {
 public static void main(String[] args) {
  //呼叫cutFile()函式 傳人蔘數分別為 (原大檔案,切割後存放的小檔案的路徑,切割規定的記憶體大小)
  cutFile("D:\\java\\cut\\ForrestGump.avi","D:\\java\\cuts",1024 * 1024 * 20);
 }

 private static void cutFile(String src,String endsrc,int num) {
  FileInputStream fis = null;
  File file = null;
  try {
   fis = new FileInputStream(src);
   file = new File(src);
   //建立規定大小的byte陣列
   byte[] b = new byte[num];
   int len = 0;
   //name為以後的小檔案命名做準備
   int name = 1;
   //遍歷將大檔案讀入byte陣列中,當byte陣列讀滿後寫入對應的小檔案中
   while ((len = fis.read(b)) != -1) {
    //分別找到原大檔案的檔名和檔案型別,為下面的小檔案命名做準備
    String name2 = file.getName();
    int lastIndexOf = name2.lastIndexOf(".");
    String substring = name2.substring(0,lastIndexOf);
    String substring2 = name2.substring(lastIndexOf,name2.length());
    FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
    //將byte陣列寫入對應的小檔案中
    fos.write(b,len);
    //結束資源
    fos.close();
    name++;
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    if (fis != null) {
     //結束資源
     fis.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
}

對應路徑截圖

原大檔案路徑截圖:

Java如何將大檔案切割成小檔案

切割後的小檔案執行程式碼前路徑截圖:

Java如何將大檔案切割成小檔案

切割後的小檔案執行程式碼後路徑截圖:

Java如何將大檔案切割成小檔案

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。