您的位置:首页 > 理论基础 > 计算机网络

IO流---异常处理机制

2015-06-26 23:57 489 查看
  ——- android培训java培训、期待与您交流! ———-

IO异常处理机制

异常就是可以预见的错误,java中所有的异常都从Throwable类中继承,

不过在一般情况下都会由 Exception 类派生出来。

异常分为两个部分:

错误:出现错误,只能终止程序

异常:出现异常,可以处理异常

异常又分为两种:

运行时期异常,是由程序员自身错误造成的,也称为未检查异常,例如空指针异常、数组越界异常等。

非运行期异常:除运行期异常外,其他都属于非运行期异常,也叫检查异常

异常的声明:

异常声明是在方法的头部,利用关键字throws来表示此方法在运行的时候可能会出错。

其实就是声明一个异常类,在声明之后将其抛出。如实例1和实例3都有抛出异常

异常的抛出:

就是将异常抛给异常处理器,暂时不去处理它。

还有一种异常就是不断的抛出而不去进行处理,这是通过关键字throw来处理的。

因为他们的父类都是Exception,所以可以使用父类来代替所以的异常

异常抛出的模型:

方法名 throws Exception

{

throw Exception

}

检查异常可以分为很多种,主要分类如下:

SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。

ArithmeticException 算术异常。例如,一个整数“除以零”时

ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常

NullPointerException 无空间对象异常。

IllegalArgumentException 向方法传递了一个不合法或不正确的参数。

NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。

ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常

IOException IO异常,当发生某种 I/O 异常时,抛出此异常

import java.io.*;
class  ExceptionDemo {
public static void main(String[] args) {
//在try之前创建文件流对象引用,try时再在内部初始化。
//因为finally要执行关闭流的操作
FileWriter fw = null;
//检测异常
try{
//创建对象实体并与指定目录下的文件关联,如果目录不存在就会报找不到路径异常。
fw = new FileWriter("txt1\\txt-1.txt");
//写入数据到流中。
fw.write("Hello World");
}
//捕获异常
catch (IOException e){
System.out.println("错误:"+e.toString());
}
//最后要关闭流,关闭流也要检测异常。
finally{
try{
//先判断如果对象不为null,表示有对象实体--流,就关闭流
if(fw!=null)
fw.close();
}
catch (IOException e){
System.out.println("错误:"+e.toString());
}
}
}
}


练习:

将某个文件从C盘复制到D盘

复制的原理:

其实就是将C盘下的文件数据存储到D盘的一个文件中。

步骤:

1、在D盘创建一个文件,用于存储C盘文件中的数据。

2、定义读取流和C盘文件关联。

3、通过不断的读写(循环读写)完成数据存储。

4、关闭资源。

可以用两种方式实现,如实例6和实例7,主要是实例7。

复制文本文件方式1

import java.io.*;
class  CopyFileDemo{
public static void main(String[] args) throws IOException{
//创建文件写入流--目的地
FileWriter fw = new FileWriter("txt\\txt-Copy.txt");
//创建文件读取流--源文件
FileReader fr = new FileReader("txt\\txt-1.txt");
//从文件读取流中读取所有文件到写入流中。
int ch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
//关闭两个流
fw.close();
fr.close();
}
}


由于上面的代码没有对程序可能出现的异常进行处理,

下面将详细检测和处理异常。并对代码进行优化。

import java.io.*;
class  CopyFileTest{
public static void main(String[] args) throws IOException{
//创建写入流和读取流的对象引用
FileWriter fw = null;
FileReader fr = null;
//检测异常
try{
//创建对象实体-源文件和目的文件
fw = new FileWriter("txt\\txt-1 附件.txt");
fr = new FileReader("txt\\txt-1.txt");
//创建字符数组,用于存储读到的字符数据
char[] buf = new char[1024];
int len = 0;
while((len=fr.read(buf))!=-1){
//写入字符数组从0到len部分。一次性写入
fw.write(buf,0,len);
}
}
//处理异常
catch (IOException e){
throw new RuntimeException("读写失败!");
}
//最终要执行关闭2个流的动作。
finally{
//关闭前要判断流是否存在,存在就关闭,关闭动作也要进行异常处理
if(fr!=null)
try{fr.close();}
catch (IOException e){}
if(fw!=null)
try{fw.close();}
catch (IOException e){}
}
}
}


  ——- android培训java培训、期待与您交流! ———-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 网络 服务器