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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘明瑞 黑马帝   /  2012-1-13 15:51  /  2237 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘明瑞 于 2012-1-13 16:44 编辑

我把一个MP3分割成了11个部分,分割部分代码没问题。但是在合并的时候,却发现合并后的大小跟分割前差很远。
请各位大大帮我看一下,代码我是按照毕老师写的代码写的。到底哪里出错了啊?

代码如下:
public class SplitFileDemo {
        public static void main(String[] args) throws IOException{
                File file_1 = new File("E:\\Mine Mine.mp3");
               
                //splitFile(file_1);
                merge(11);
               
        }
       
        public static void merge(int count) throws IOException {
                ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
                for(int i = 1; i <= count ; i ++) {
                        al.add(new FileInputStream("E:\\mine mine\\" +count + ".part"));
                }
                final Iterator<FileInputStream> it = al.iterator();
                Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
                        public boolean hasMoreElements() {
                                return it.hasNext();
                        }
                        public FileInputStream nextElement() {
                                return it.next();
                        }
                };
               
                SequenceInputStream sis = new SequenceInputStream(en);
                FileOutputStream fos = new FileOutputStream("E:\\mine mine\\mine mine.mp3");
                byte[] buf = new byte[1024];
                int len = 0;
                while((len = sis.read(buf)) != -1) {
                        fos.write(buf, 0, len);
                }
                fos.close();
                sis.close();
        }
       
       
        public static void splitFile(File file_1) throws IOException{
                FileInputStream fis = new FileInputStream(file_1);
                FileOutputStream fos = null;
               
                byte[] buf = new byte[1024*1024];
                int len = 0;
                int count = 1;
                while((len = fis.read(buf)) != -1) {
                        fos = new FileOutputStream("E:\\mine mine\\" + (count++) + ".part");
                        fos.write(buf, 0, len);
                        fos.close();
                }
                fis.close();
        }
}

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 大意失荆州啊,呵呵!

查看全部评分

2 个回复

倒序浏览

回帖奖励 +1

public static void merge(int count) throws IOException {
                ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
                for(int i = 1; i <= count ; i ++) {
                        al.add(new FileInputStream("E:\\mine mine\\" +count + ".part")); //这边应该是:i
                }

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘基军 发表于 2012-1-13 16:22
public static void merge(int count) throws IOException {
                ArrayList al = new ArrayLis ...

呵呵。。我傻了,这都没看到。确实如此。谢了哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马