A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiang_ming 中级黑马   /  2014-5-29 11:54  /  2720 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jiang_ming 于 2014-5-29 15:49 编辑

毕老师视频里,有对小文件(几兆)分割的代码?如何对几百兆的大文件进行分割?(按每份100兆)代码如何编写?
下面代码是小文件分割的
  1. public static void splitFile() throws Exception
  2.         {
  3.                 FileInputStream fis =new FileInputStream("d:\\1.mp3");
  4.                 FileOutputStream fos=null;
  5.                 byte[] buf=new byte[1024*1024*4];
  6.                 int len=0;
  7.                 int count=1;
  8.                 while ((len=fis.read(buf))!=-1)
  9.                 {
  10.                         fos=new FileOutputStream("d:\\splitfiles\\"+(count++)+".part");
  11.                         fos.write(buf,0,len);
  12.                         fos.close();
  13.                 }
  14.                
  15.                 fis.close();

  16.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

10 个回复

倒序浏览
进来看看
回复 使用道具 举报
偶根据视频中的讲解试了一下可以(做计数器),我切了一个4百多兆的视频文件,切完属性大小与原大小字节数一致;
代码如下:
  1. import java.io.*;

  2. public class Snippet {
  3.         public static void main(String[]args)throws IOException
  4.         {
  5.                 splitFile();
  6.         }
  7.         public static void splitFile() throws IOException
  8.                 {
  9.                         FileInputStream fis =new FileInputStream("D:\\おおかみこどもの雨と雪.rmvb");
  10.                         FileOutputStream fos=null;
  11.                         
  12.                         byte buf[]=new byte[1024*1024*5];//定义一次写入5M数据
  13.                         int len=0;
  14.                         int count=1;
  15.                         fos=new FileOutputStream("d:\\"+(count++)+".part");
  16.                      
  17.                         int num = 1;//用来记录程序运行中实时的每个output写入次数
  18.                         while ((len=fis.read(buf))!=-1)
  19.                         {
  20.                                 fos.write(buf,0,len);
  21.                                 if(num>20)//如果写入次数大于20(即单个文件超过100M),则此流停止,创建新的输出流写入另外新的片段  
  22.                                  {               
  23.                                     fos.close();
  24.                                     fos=new FileOutputStream("d:\\"+(count++)+".part");
  25.                                     num = 1;//重新计数
  26.                                  }
  27.                             else
  28.                             {                    
  29.                                     num++;
  30.                             }      
  31.                         }
  32.                         fis.close();  
  33.                         fos.close();
  34.                         System.out.println("切割完毕!");
  35.                 }
  36. }
复制代码

如果比较大的文件的话,程序运行会需要一点时间。1G的话,我的电脑需要二三十秒。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
波涛 发表于 2014-5-29 15:02
偶根据视频中的讲解试了一下可以(做计数器),我切了一个4百多兆的视频文件,切完属性大小与原大小字节数一 ...

谢谢,我知道怎么用了
回复 使用道具 举报
谢谢楼主啊啊啊啊
回复 使用道具 举报
波涛 发表于 2014-5-29 15:02
偶根据视频中的讲解试了一下可以(做计数器),我切了一个4百多兆的视频文件,切完属性大小与原大小字节数一 ...

这个程序之前一直记得抽口要写,知道看到该贴才记起来把这个事儿给忘了,
顶一个!同学多少期?
回复 使用道具 举报
yinxjfly 发表于 2014-6-30 21:43
这个程序之前一直记得抽口要写,知道看到该贴才记起来把这个事儿给忘了,
顶一个!同学多少期? ...

39期,你呢?
回复 使用道具 举报
都是大神啊,谢谢分享。
回复 使用道具 举报

我是40期!过两天面试,实在惭愧,这才发现我上一条留言那么多错别字!
回复 使用道具 举报
”抽口“是什么啊?
回复 使用道具 举报
之前没想到,一看很明了啊,不错,很多东西不是没学,而是不会现学现用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马