//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(); } } }