1. 程式人生 > >文件拆分成指定大小(IO流)

文件拆分成指定大小(IO流)

tab 文件大小 sys write exception public each 文件讀取 rac

 1 package stream;
 2   
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.util.Arrays;
 8   
 9 public class TestStream {
10   
11     public static void main(String[] args) {
12         int eachSize = 100 * 1024; //
100k 13 File srcFile = new File("d:/eclipse.exe"); 14 splitFile(srcFile, eachSize); 15 } 16 17 /** 18 * 拆分的思路,先把源文件的所有內容讀取到內存中,然後從內存中挨個分到子文件裏 19 * @param srcFile 要拆分的源文件 20 * @param eachSize 按照這個大小,拆分 21 */ 22 private static void splitFile(File srcFile, int
eachSize) { 23 24 if (0 == srcFile.length()) 25 throw new RuntimeException("文件長度為0,不可拆分"); 26 27 byte[] fileContent = new byte[(int) srcFile.length()]; 28 // 先把文件讀取到數組中 29 try { 30 FileInputStream fis = new FileInputStream(srcFile); 31 fis.read(fileContent);
32 fis.close(); 33 } catch (IOException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 // 計算需要被劃分成多少份子文件 38 int fileNumber; 39 // 文件是否能被整除得到的子文件個數是不一樣的 40 // (假設文件長度是25,每份的大小是5,那麽就應該是5個) 41 // (假設文件長度是26,每份的大小是5,那麽就應該是6個) 42 if (0 == fileContent.length % eachSize) 43 fileNumber = (int) (fileContent.length / eachSize); 44 else 45 fileNumber = (int) (fileContent.length / eachSize) + 1; 46 47 for (int i = 0; i < fileNumber; i++) { 48 String eachFileName = srcFile.getName() + "-" + i; 49 File eachFile = new File(srcFile.getParent(), eachFileName); 50 byte[] eachContent; 51 52 // 從源文件的內容裏,復制部分數據到子文件 53 // 除開最後一個文件,其他文件大小都是100k 54 // 最後一個文件的大小是剩余的 55 if (i != fileNumber - 1) // 不是最後一個 56 eachContent = Arrays.copyOfRange(fileContent, eachSize * i, eachSize * (i + 1)); 57 else // 最後一個 58 eachContent = Arrays.copyOfRange(fileContent, eachSize * i, fileContent.length); 59 60 try { 61 // 寫出去 62 FileOutputStream fos = new FileOutputStream(eachFile); 63 fos.write(eachContent); 64 // 記得關閉 65 fos.close(); 66 System.out.printf("輸出子文件%s,其大小是 %d字節%n", eachFile.getAbsoluteFile(), eachFile.length()); 67 } catch (IOException e) { 68 // TODO Auto-generated catch block 69 e.printStackTrace(); 70 } 71 } 72 } 73 }

文件拆分成指定大小(IO流)