標籤:
//java實現把一個大檔案切割成N個固定大小的檔案 package com.johnny.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; public class FenGeFile { public static final String SUFFIX = “.txt”; // 分割後的檔案名稱尾碼 // 將指定的檔案按著給定的檔案的位元組數進行分割檔案,其中name指的是需要進行分割的檔案名稱,size指的是指定的小檔案的大小 public static String[] divide(String name, long size) throws Exception { File file = new File(name); if (!file.exists() || (!file.isFile())) { throw new Exception(“指定檔案不存在!”); } // 獲得被分割檔案父檔案,將來被分割成的小檔案便存在這個目錄下 File parentFile = file.getParentFile(); // 取得檔案的大小 long fileLength = file.length(); System.out.println(“檔案大小:”+fileLength+” 位元組”); if (size <= 0) { size = fileLength / 2; } // 取得被分割後的小檔案的數目 int num = (fileLength % size != 0) ? (int) (fileLength / size + 1) : (int) (fileLength / size); // 存放被分割後的小檔案名稱 String[] fileNames = new String[num]; // 輸入檔案流,即被分割的檔案 FileInputStream in = new FileInputStream(file); // 讀輸入檔案流的開始和結束下標 long end = 0; int begin = 0; // 根據要分割的數目輸出檔案 for (int i = 0; i < num; i++) { // 對於前num – 1個小檔案,大小都為指定的size File outFile = new File(parentFile, file.getName() + i + SUFFIX); // 構建小檔案的輸出資料流 FileOutputStream out = new FileOutputStream(outFile); // 將結束下標後移size end += size; end = (end > fileLength) ? fileLength : end; // 從輸入資料流中讀取位元組儲存到輸出資料流中 for (; begin < end; begin++) { out.write(in.read()); } out.close(); fileNames[i] = outFile.getAbsolutePath(); } in.close(); return fileNames; } public static void readFileMessage(String fileName) {// 將分割成的小檔案中的內容讀出 File file = new File(fileName); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String string = null; // 按行讀取內容,直到讀入null則表示讀取檔案結束 while ((string = reader.readLine()) != null) { System.out.println(string); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } public static void main(final String[] args) throws Exception { String name = “D:/boss/123.txt”; long size = 1024*1024*4;//1K=1024b(位元組) String[] fileNames = FenGeFile.divide(name, size); System.out.println(“檔案” + name + “分割的結果如下:”); for (int i = 0; i < fileNames.length; i++) { System.out.println(fileNames[i] + “的內容如下:”); //FenGeFile.readFileMessage(fileNames[i]); System.out.println(); } } }
java實現把一個大檔案切割成N個固定大小的檔案