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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欢欢 高级黑马   /  2014-2-6 22:45  /  1550 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 欢欢 于 2014-2-7 00:40 编辑
  1. import java.io.*;
  2. import java.util.*;

  3. class SplitFile
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 splitFile();
  8.         }

  9.         //切割文件
  10.         public static void splitFile() throws IOException
  11.         {
  12.                 FileInputStream fis = new FileInputStream("cat.jpg");

  13.                 FileOutputStream fos = null;
  14.                
  15.                 byte[] buf = new byte[1024];//这个数组不能开太大,因为会发生内存溢出。

  16.                 int len = 0;
  17.                 int count = 1;
  18.                 while((len=fis.read(buf))!=-1)
  19.                 {
  20.                         fos = new FileOutputStream(".\\splitFiles\\"+(count++)+".part");
  21.                         fos.write(buf,0,len);
  22.                         fos.close();
  23.                 }

  24.                 fis.close();
  25.         }
  26. }
复制代码

如果待切割文件比较大的话,此代码中的字节数组只开1024个字节,怎么才能切出每个大小为1024*10的碎片文件?
我试了半天还是没能写出来,求指教!

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

8 个回复

倒序浏览
byte[] buf = new byte[1024*10];
回复 使用道具 举报
淡夜清风 发表于 2014-2-6 23:07
byte[] buf = new byte[1024*10];

假如文件很大,几个G那种,数组只开1024*1024,然后怎么切成少数几块,不要切的太多
回复 使用道具 举报
淡夜清风 发表于 2014-2-6 23:07
byte[] buf = new byte[1024*10];

你学到哪了现在?
回复 使用道具 举报
  1. import java.io.*;
  2. import java.util.*;

  3. class SplitFile
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 splitFile();
  8.         }

  9.         //切割文件
  10.         public static void splitFile() throws IOException
  11.         {
  12.                 FileInputStream fis = new FileInputStream("gtx.rmvb");//切割一个电影文件

  13.                 FileOutputStream fos = null;
  14.                
  15.                 byte[] buf = new byte[1024*1024];//这个数组不能开太大,因为会发生内存溢出。

  16.                 int len = 0;
  17.                 int count = 1;
  18.                 int time = 0;
  19.                 fos = new FileOutputStream((count++)+".part");
  20.                 while((len=fis.read(buf))!=-1)
  21.                 {
  22.                         
  23.                         fos.write(buf,0,len);
  24.                         time++;
  25.                         if(time>256){ //每份文件的大小是257MB
  26.                           fos.close();
  27.                           fos = new FileOutputStream((count++)+".part");
  28.                           time = 0;
  29.                         }
  30.                        
  31.                 }
  32.                 if(fos!=null)
  33.                         fos.close();

  34.                 fis.close();
  35.         }
  36. }
复制代码

12.jpg (72.34 KB, 下载次数: 29)

12.jpg

13.jpg (72.36 KB, 下载次数: 30)

13.jpg

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
欢欢 发表于 2014-2-6 23:11
你学到哪了现在?

我看到张孝祥的基础加强了。你呢?
回复 使用道具 举报

谢谢你的耐心解答,答的太好了。
我学到21天了
回复 使用道具 举报
你们都是走30期的吗?
回复 使用道具 举报
唐志海 发表于 2014-2-7 01:24
你们都是走30期的吗?

呵呵,差不多吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马