码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-15 23:58:24      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:.exe   get   blog   pre   bsp   array   分数   write   class   

 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流)

标签:.exe   get   blog   pre   bsp   array   分数   write   class   

原文地址:http://www.cnblogs.com/SubFirst-D/p/7188441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!