Java如何將大檔案切割成小檔案
阿新 • • 發佈:2020-05-21
運用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(); } } } }
對應路徑截圖
原大檔案路徑截圖:
切割後的小檔案執行程式碼前路徑截圖:
切割後的小檔案執行程式碼後路徑截圖:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。