zoukankan      html  css  js  c++  java
  • 文件拆分成指定大小(IO流)

     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 }
  • 相关阅读:
    MySQL的数据库,数据表,数据的操作
    数组函数
    字符串函数,时间函数,数学函数,数组
    PHP函数
    php类型的相关函数,运算符,条件判断,循环
    PHP数据类型
    vector中erase用法注意事项
    C++11 右值引用&&
    vector中find和find_if的用法 以后再遍历剁手!
    在cocos2d中添加自己的shader教程
  • 原文地址:https://www.cnblogs.com/SubFirst-D/p/7188441.html
Copyright © 2011-2022 走看看