java学习之IO文件分割

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习之IO文件分割相关的知识,希望对你有一定的参考价值。

 1 package om.gh.homework;
 2 import java.io.*;
 3 /**
 4  * 实现分割文件;
 5  * @param file
 6  */
 7 public class HomeWork {
 8     /**
 9      * @param src
10      *            要分割的文件路径
11      * @param n
12      *            每个文件的大小以mb为单位
13      * @param desc
14      *            分割的文件存放路径
15      * @throws FileNotFoundException
16      */
17     public static void filesplit(File src, int mb, File desc)
18             throws FileNotFoundException {
19         // 判断文件路径
20         if (src.exists() && src.isFile() && desc.isDirectory()) {
21             int fileSize = mb * 1024 * 1024;
22             int n;
23             // 判断要分割文件的个数n;
24             if (src.length() % fileSize == 0)
25                 n = (int) (src.length() / fileSize);
26             else
27                 n = (int) (src.length() / fileSize) + 1;
28             try {
29                 InputStream is = new FileInputStream(src);
30                 BufferedInputStream bis = new BufferedInputStream(is);
31                 for (int i = 0; i < n; i++) {// 循环写入每个文件;
32                     byte[] b = new byte[fileSize];
33                     String newfile = desc.getPath() + File.separator
34                             + src.getName()+"_"+ i + ".dat";
35                     BufferedOutputStream bos = new BufferedOutputStream(//缓存流
36                             new FileOutputStream(newfile));
37                     int len = -1;
38                     int count=0;
39                     while ((len = bis.read(b)) != -1) {
40                         bos.write(b,0,len);
41                         count+=len;
42                         bos.flush();
43                         if(count>=fileSize)break;
44                     }
45                     bos.close();
46                 }
47                 bis.close();
48                 is.close();
49             } catch (FileNotFoundException e) {
50                 e.printStackTrace();
51             } catch (IOException e) {
52                 e.printStackTrace();
53             }
54         } else {
55             throw new FileNotFoundException("文件不存在或者参数错误!");
56         }
57     }
58     
59     public static void main(String[] args) {
60         File src = new File("F:\\电影\\万万没想到.mp4");//要分割的目标文件
61         File desc = new File("f:\\视频\\");//分割完存放的路径
62         int mb = 500;// 每个文件大小,以Mb为单位;
63         System.out.println("开始分割...");
64         try {
65             filesplit(src, mb, desc);
66         } catch (FileNotFoundException e) {
67             e.printStackTrace();
68         }
69         System.out.println("分割完成!");
70     }
71 }

 

 1 package om.gh.homework;
 2 import java.io.*;
 3 /**
 4  * 把分割后的文件合并
 5  * 
 6  * @author ganhang
 7  * 
 8  */
 9 public class Homework2 {
10     /**
11      * 
12      * @param desc
13      *            合成后的文件路径
14      * @param src
15      *            要合成的文件列表
16      */
17     public static void merge(File desc, File... src) {
18         try {
19             String filename = src[0].getName().substring(0,
20                     src[0].getName().lastIndexOf("_"));
21             File newfile = new File(desc.getPath() + File.separator + filename);
22             OutputStream os = new FileOutputStream(newfile);
23             BufferedOutputStream bos = new BufferedOutputStream(os);
24             for (int i = 0; i < src.length; i++) {
25                 BufferedInputStream bis = new BufferedInputStream(
26                         new FileInputStream(src[i]));
27                 byte[] b = new byte[1024 * 1024];
28                 int len = -1;
29                 while ((len = bis.read(b)) != -1) {
30                     bos.write(b, 0, len);
31                     bos.flush();
32                 }
33                 bis.close();
34             }
35             bos.close();
36             os.close();
37             System.out.println("合成成功!");
38         } catch (FileNotFoundException e) {
39             e.printStackTrace();
40         } catch (IOException e) {
41             e.printStackTrace();
42         }
43     }
44     public static void main(String[] args) {
45         File desc=new File("f:\\视频\\");
46         File [] src={
47                 new File("f:\\视频\\万万没想到.mp4_0.dat"),
48                 new File("f:\\视频\\万万没想到.mp4_1.dat"),
49                 new File("f:\\视频\\万万没想到.mp4_2.dat"),
50                 new File("f:\\视频\\万万没想到.mp4_3.dat")
51         };
52         System.out.println("开始合成...");
53         merge(desc,src);
54     }
55 }

 

以上是关于java学习之IO文件分割的主要内容,如果未能解决你的问题,请参考以下文章

Java学习之IO流三

Java学习之文件io流篇

java学习之IO字符流

18 Java学习之IO概述

Java学习之IO流(序列流--SequenceInputStream)

Java学习之IO流(操作对象)