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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李娟 黑马帝   /  2011-12-23 15:45  /  1737 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李娟 于 2011-12-23 23:07 编辑

public static void splitFile()throws IOException
        {
                FileInputStream fis = new FileInputStream("d:\\java\\1.bmp");
                FileOutputStream fos = null;
                byte[] buf = new byte[1024*1024];
                int len = 0;
                int count = 1;
                while((len=fis.read(buf))!=-1)
                {
                        fos = new FileOutputStream("d:\\java\\splitfiles"+(count++)+".part");
                        fos.write(buf,0,len);
                        fos.close();
                }
                fis.close();
        }//运行程序,但是出不来效果

4 个回复

倒序浏览
输入流"d:\\java\\1.bmp",存在吗?
回复 使用道具 举报
李楠 黑马帝 2011-12-23 16:19:48
藤椅
  byte[] buf = new byte[1024*1024];
你这个定义的也太大了吧。这可是一个G。。
你改小了就可以了。
回复 使用道具 举报
杨强 黑马帝 2011-12-23 16:51:58
板凳
本帖最后由 杨强 于 2011-12-23 16:53 编辑

public static void fenGe() throws IOException{
                        File f = new File("psb.jpg");
                        long l = f.length()%5 == 0 ? f.length()/5 :f.length()/5 +1;//分成5份
                        int filename=1;//定义个分割后的文件名
                        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
                        FileOutputStream fos = new FileOutputStream(filename+"");
                        int b ;
                        int len =0; //用来判断一份是否写满  写满就写下一份
                        while((b=bis.read()) != -1){
                                fos.write(b);
                                if(++len ==l){
                                        fos.close();
                                        fos = new FileOutputStream(++filename+"");
                                        len=0;
                                }
                               
                        }               
                bis.close();
                                fos.close();
                }
回复 使用道具 举报
兄弟,你要是想看每个切出来的文件的效果,就只能用文本文档,
像你这个图片的话,切出来之后就不是一个完整的根本就无法预览的。
2楼那个,1024*1024在这里算的是一个MB,不是G,所以不用担心缓冲区过大。
因为默认的是按字节传输,所以后面的单位都是B,所以是1Kb*1Kb
你换个文本文件试试,看能不能出效果,如果不出意外的话,是可以有效果的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马