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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 祁焱 黑马帝   /  2011-11-23 19:30  /  1440 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 祁焱 于 2011-11-24 11:31 编辑

下面代码是照视频上写的,不知道那块写错了,希望大家帮忙解决,代码如下:
import java.io.*;
import java.util.*;

public class SpiltFile {

    public static void main(String[] args) throws IOException {
        merge();
    }

    public static void merge() throws IOException {
        ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
        for (int x = 1; x <= 4; x++) {
            al.add(new FileInputStream("C:\\splitfiles\\" + x + ".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("C:\\0.jpg");
            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() throws IOException {
        FileInputStream fis = new FileInputStream("C:\\1.jpg");
        FileOutputStream fos = null;
        byte[] buf = new byte[1024 * 1024];
        int len = 0;
        int count = 1;
        while ((len = fis.read(buf)) != -1) {
            fos = new FileOutputStream("C:\\splitfiles\\" + (count++) + ".part");
            fos.write(buf, 0, len);
            fos.close();
        }
        fis.close();
    }
}
异常信息:
        Exception in thread "main" java.io.IOException: 当文件已存在时,无法创建该文件。
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:199)
        at java.io.SequenceInputStream.read(SequenceInputStream.java:191)
        at java.io.InputStream.read(InputStream.java:85)
        at javatest.javaIO3.SpiltFile.merge(SpiltFile.java:39)
        at javatest.javaIO3.SpiltFile.main(SpiltFile.java:17)
Java Result: 1
成功生成(总时间:0 秒)

4 个回复

倒序浏览
Exception in thread "main" java.io.IOException  

这句都提示你了,你的主方法都往上抛异常,你还指望虚拟机帮你解决啊
你得写个try{}catch{}语句来接受异常

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
用Try/catch处理异常

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你把可能出错的代码块用try catch包起来,Java虚拟机会在出错的时候自动将错误信息赋值给你的catch语句中声明使用的异常类中,这就是异常的捕获,然后在catch的{}中,你可以写针对每种错误的处理方法;
而手动抛出就是在可能出错的位置,用throw关键字将错误信息传递给一个指定的异常类,比如throw new IOException() 、thorw new HighLevelException()等等.
如果主方法提示异常,那只能用接收异常处理了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
祁焱 黑马帝 2011-11-24 11:28:40
报纸
谢谢大家问题已解绝,集成化工具惹的祸,格式化代码的时候for循环的大括号范围扩大了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马