java實現把一個大文件切割成N個固定大小的文件

    //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(); 
                    } 
            } 
    } 
相關文章
相關標籤/搜索