首页 Java IO

Java IO

举报
开通vip

Java IOnullJava网络编程 —— Java I/OJava网络编程 —— Java I/OInstructor : Teaching Assistants: ?主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 3-4 文件I/O 3-5 Java I/O 流主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 什么是例外 什么是例外 例外就是在程序的运行过程中所发生的例外事件,它中断指令的正常执行。Java中提供了一种独特的处...

Java IO
nullJava网络编程 —— Java I/OJava网络编程 —— Java I/OInstructor : Teaching Assistants: ?主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 3-4 文件I/O 3-5 Java I/O 流主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 什么是例外 什么是例外 例外就是在程序的运行过程中所发生的例外事件,它中断指令的正常执行。Java中提供了一种独特的处理例外的机制,通过例外来处理程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中出现的错误。 例外实例 1 例外实例 1 import java.io.*; class ExceptionDemo1{  public static void main( String args[ ] ){        FileInputStream fis = new FileInputStream( "text" );        int b;        while( ( b= fis.read() )!=-1 ){         System.out.print( b );        }        fis.close( );       }      } 例外实例 1 (续)例外实例 1 (续) import java.io.*; class ExceptionDemo1{  public static void main( String args[ ] ){        FileInputStream fis = new FileInputStream( "text" );        int b;        while( ( b= fis.read() )!=-1 ){         System.out.print( b );        }        fis.close( );       }      } UnHandled exception type FileNotFoundExceptionUnHandled exception type IOException编译错误例外实例 2例外实例 2 class ExceptionDemo2{       public static void main( String args[ ] ){        int a = 0;        System.out.println( 5/a );       }      } 例外实例 2(续)例外实例 2(续) class ExceptionDemo2{       public static void main( String args[ ] ){        int a = 0;        System.out.println( 5/a );       }      } Exception in thread "main" java.lang.ArithmeticException: / by zero at teaching.io.exception.ExceptionDemo2.main(ExceptionDemo2.java:6)运行错误例外处理机制 例外处理机制 抛弃例外 两种例外处理机制 捕获例外 声明抛弃例外 在Java程序的执行过程中,如果出现了例外 事件,就会生成一个例外对象。生成的例外 对象将传递给Java运行时系统,这一例外的 产生和提交过程称为抛弃(throw)例外。 例外处理机制 例外处理机制 抛弃例外 两种例外处理机制 捕获例外 声明抛弃例外 当Java运行时系统得到一个例外对象时,它将会沿着 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 的调用栈 逐层回溯,寻找处理这一例外的代码。找到能够处理这种类型的例外 的方法后,运行时系统把当前例外对象交给这个方法进行处理, 这一过程称为捕获(catch)例外。这是积极的例外处理机制。如果 Java运行时系统找不到可以捕获例外的方法,则运行时系统将终止, 相应的Java程序也将退出。 例外处理机制 例外处理机制 抛弃例外 两种例外处理机制 捕获例外 声明抛弃例外 如果一个方法并不知道如何处理所出现的例外, 则可在方法声明时,声明抛弃(throws)例外。 这是一种消极的例外处理机制。 例外类的层次 例外类的层次 在jdk中,每个包中都定义了例外类,而所有的例外类都直接或间接地继承于Throwable类。右图为jdk中例外类的继承关系。 ErrorError错误Error类一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,通常Java程序不应该捕获这类例外,也不会抛弃这种例外。 Exception的分类 Exception的分类 Exception包括运行时例外和非运行时例外。 运行时例外运行时例外继承于RuntimeException的类都属于运行时例外,例如算术例外(除零错)、数组下标越界例外等等。 由于这些例外产生的位置是未知的,Java 编译器允许程序员在程序中不对它们做出处理。 非运行时例外非运行时例外除了运行时例外之外的其他由Exception 继承来的例外类都是非运行时的例外,例如FileNotFoundException(文件未找到例外)。 Java编译器要求在程序中必须处理这种例外,捕获例外或者声明抛弃例外。 Java例外处理方法 Java例外处理方法 例外处理的方法有两种: 一种方法是使用try…catch…finally结构对例外进行捕获和处理; 二种方法是通过throws和throw抛出例外。Java例外处理形式 Java例外处理形式 try { 可能出现例外的程序代码 } catch (例外类名1 例外对象名1) { 例外类名1对应的例外处理代码 } catch (例外类名2 例外对象名2) { 例外类名2对应的例外处理代码 } ┇ finally { 必须执行的代码 } try…catch…finally结构try…catch…finally结构将可能发生例外的程序代码放置在try程序块中。程序运行过程中,后面的各catch块不起任何作用。但如果该块内的代码出现了例外,系统将终止try块代码的执行,自动跳转到所发生的例外类对应的catch块中,执行该块中的代码。 其中的finally块是个可选项,如果包含有finally块,无论例外是否发生,finally块的代码必定执行。 一个try块可以对应多个catch块,用于对多个例外类进行捕获。捕获例外的顺序和catch语句的顺序有关,当捕获到一个例外时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的例外,然后再逐渐一般化。也就是一般先安排子类,再安排父类。 例外实例 3例外实例 3public static void main(String[] args) { TestException test=new TestException(); try{ test.throwedException();//产生例外 test.handledException(); }catch(ArrayIndexOutOfBoundsException ex){ System.out.println("错误,数组越界."); }catch(ArithmeticException ex1){//捕获例外 System.out.println("错误,分母为零."); }finally{ //必定执行的代码块 System.out.println("程序结束"); } }抛出例外 抛出例外 通常情况下,例外是由系统自动捕获的。但程序员也可以自己通过throw语句抛出例外。throw语句的格式为: throw new 例外类名(信息) 其中例外类名为系统例外类名或用户自定义的例外类名,“信息”是可选信息。如果提供了该信息,getMessage()和toString()方法的返回值中将增加该信息内容。 例外实例 4 例外实例 4 在实例1的TestException类中增加一个方法,generateException,该方法的代码如下: public void generateException(){ throw new ArithmeticException("程序产生的例外"); }例外实例 4 (续)例外实例 4 (续)TestException类的改变如下: try{ test.generateException(); … }catch(ArithmeticException ex1){ System.out.println(ex1.getMessage()); } … finally{ System.out.println("程序结束"); }声明抛弃例外 声明抛弃例外 在有些情况下,一个方法并不需要处理它所生成的例外,而是向上传递,由调用该方法的其他方法来捕获该例外,这时就要用到throws子句。其格式如下: 返回类型 方法名([参数表]) throws 例外类型名 { 声明部分 } throws子句中同时可以指明多个例外,之间由逗号隔开。例如: public static void main(String args[]) throws  IOException,IndexOutOfBoundsException {…} 自定义例外 自定义例外 自定义例外类可以通过继承Exception类来实现。其一般形式为: class 自定义例外类名 extends Exception { 例外类体; } Exception类的主要方法有public Exception( );public Exception(String s);public String toString( );public String getMessage( );自定义例外可以重载这些方法。 例外实例 5例外实例 5定义一个新例外类MyException: package teaching.io.exception; public class MyException extends Exception { public String getMessage(){ return "程序自定义的例外。"; } } 例外实例 5 (续)例外实例 5 (续)在实例1的TestException类中增加一个方法,generateMyException,该方法的代码如下: 注意自定义例外属于非运行时例外,抛出时必须在方法上使用例外抛出选项(throws MyException)public void generateMyException() throws MyException{ throw new MyException(); }例外实例 5 (续)例外实例 5 (续)TestException类的改变如下: try{ test.generateMyException(); … }catch(MyException ex2){ System.out.println(ex2.getMessage()); } … finally{ System.out.println("程序结束"); }作业 3-1(10分)作业 3-1(10分)定义一个自定义例外类,该例外在用户参数输入过多时抛出。(2分) 同时编写一个程序采用该例外提示用户参数输入错误。在该程序中要求用到throws、throw、finally关键字。(3分) 什么是例外?它有哪些分类,它们之间有什么区别?(3分) Throw和throws分别用在什么场合?printStackTrace方法有什么作用?(2分)主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 I/O操作的相似性I/O操作的相似性输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。这些操作都有相似性,如:控制台(console, 如DOS窗口)打印/读入 文件(file)读/写 网络接口(TCP/UDP端口)读/写流的抽象流的抽象Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。 Input StreamReader什么是流什么是流流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。 流的重要特性 顺序读/写 sequentially流的特点流的特点流具有顺序性 流一般是同步的(阻塞式的)。 流的特点流的特点流具有顺序性 流一般是同步的(阻塞式的) Streams are synchronous; that is, when a program (really, a thread) asks a stream to read or write a piece of data, it waits for the data to be read or written before it does anything else. 主要内容 主要内容 3-1 例外处理 3-2 流 3-3 Java I/O 基类 Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流从InputStream和OutputStream 派生出来的一系列类。这类流以 字节(byte)为基本处理单位。 Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流从Reader和Writer派生出的一系 列类,这类流以16位的Unicode码 表示的字符为基本处理单位。Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流过滤流在读/写数据的同时可以对数据进行处理, 它提供了同步机制,使得某一时刻只有一个线 程可以访问一个I/O流,以防止多个线程同时对 一个I/O流进行操作所带来的意想不到的结果。 类FilterInputStream和FilterOutputStream 分别作为所有过滤输入流和输出流的父类。 Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流用于对象的序列化,如 ObjectInputStream、 ObjectOutputStream Java I/O流的分类Java I/O流的分类字节流、字符流、过滤流、对象流、其他流 文件流、管道流、内存读写流、 顺序读写流等其他流,如: File、RandomAccessFile、 PipedInputStream、 ByteArrayInputStream、 SequenceInputStream等 字节流字节流字符流字符流流的读写单位流的读写单位字节流(byte stream): 一个字节(8-bit)一个字节读/写 字符流(character stream):一个字符一个字符读/写(具有特定字符编码的数据)j a v a 语 言 6A 61 76 61 D3 EF D1 D4 以字节流的方式读: 读8次,8个字节 以字符流的方式读: 读6次,6个字符流的读写过程流的读写过程读(Reading) open a stream //打开读出流 while more information //判断 read information //读 close the stream //关闭流 写(Writing) open a stream //打开写入流 while more information //判断 write information //写 close the stream //关闭流 InputStream基本方法InputStream基本方法public abstract int read( ) throws IOException public int read(byte[] input) throws IOException public int read(byte[] input, int offset, int length) throws IOException public long skip(long n) throws IOException public int available( ) throws IOException public void close( ) throws IOExceptionOutputStream基本方法OutputStream基本方法public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException public void write(byte[] data, int offset, int length) throws IOException public void flush( ) throws IOException public void close( ) throws IOException Reader基本方法Reader基本方法protected Reader( ) protected Reader(Object lock) public abstract int read(char[] text, int offset, int length) throws IOException public int read( ) throws IOException public int read(char[] text) throws IOException public long skip(long n) throws IOException Reader基本方法(续)Reader基本方法(续)public boolean ready( ) public boolean markSupported( ) public void mark(int readAheadLimit) throws IOException public void reset( ) throws IOException public abstract void close( ) throws IOException Writer基本方法Writer基本方法protected Writer( ) protected Writer(Object lock) public abstract void write(char[] text, int offset, int length) throws IOException public void write(int c) throws IOException public void write(char[] text) throws IOException Writer基本方法(续)Writer基本方法(续)public void write(String s) throws IOException public void write(String s, int offset, int length) throws IOException public abstract void flush( ) throws IOException public abstract void close( ) throws IOException 流实例 1流实例 1public class InputStreamDemo { public static void main(String args[]) { InputStream in=System.in; int b; try { while (( b=in.read())!=-1){ System.out.print(Integer.toHexString(b)+“ ”);} in.close(); } catch (IOException e) {e.printStackTrace();} System.out.println(); } }输入:> 12你好 输出:> 31 32 c4 e3 ba c3 d a 字节流逐个字节读入与输出字符集 GB2312流实例 2流实例 2public class ReaderDemo { public static void main(String[] args) { Reader r; int c; try { r = new InputStreamReader(System.in,"GB2312"); while ((c=r.read())!=-1){ System.out.print(Integer.toHexString(c)+" "); } r.close(); } catch (IOException e) {e.printStackTrace();} } }输入:> 12你好 输出:> 31 32 4f60 597d d a 字符流逐个字符读入与输出字符集 Unicode过滤流过滤流过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的结果。类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。过滤流的使用过滤流的使用为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通常通过在构造方法的参数中指定所要连接的输入/出流来实现。例如:   FilterInputStream( InputStream in );   FilterOutputStream( OutputStream out ); 几种常见的过滤流几种常见的过滤流 BufferedInputStream和BufferedOutputStream     缓冲流,用于提高输入/输出处理的效率。 DataInputStream 和 DataOutputStream     不仅能读/写数据流,而且能读/写各种的java语言的基本类型,如:boolean,int,float等。 PushbackInputStream     提供了一个方法可以把刚读过的字节退回到输入流中,以便重新再读一遍。 PrintStream     打印流的作用是把Java语言的内构类型以其字符表示形式送到相应的输出流。 流的缓冲流的缓冲 BufferedInputStream和BufferedOutputStream     缓冲流,用于提高输入/输出处理的效率。 DataInputStream 和 DataOutputStream     不仅能读/写数据流,而且能读/写各种的java语言的基本类型,如:boolean,int,float等。 PushbackInputStream     提供了一个方法可以把刚读过的字节退回到输入流中,以便重新再读一遍。 PrintStream     打印流的作用是把Java语言的内构类型以其字符表示形式送到相应的输出流。 缓冲可能带来的问题缓冲可能带来的问题flush文件处理文件处理I/O处理中,最常见的是对文件的操作,java.io包中有关文件处理的类有:File、FileInputStream、FileOutputStream、RamdomAccessFile和FileDescriptor;接口有:FilenameFilter。 对于文件的访问主要有两种方式:顺序和随机。 文件顺序处理文件顺序处理类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。 文件实例 1文件实例 1public class FileStreamDemo { public static void main(String[] args) { int b; try { InputStream is = new FileInputStream("test.txt"); InputStreamReader bis=new InputStreamReader(is,"GBK"); while ((b = bis.read()) != -1) {System.out.print((char) b);} } catch (IOException e) {e.printStackTrace();}} }随机访问文件随机访问文件对于InputStream 和OutputStream 来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类RandomAccessFile 提供了随机访问文件的方法。文件实例 2文件实例 2public class RandomDemo { public static void main(String[] args) { byte[] buffer=new byte[4096]; int len; try { RandomAccessFile file=new RandomAccessFile("test.txt","r"); file.seek(8); while((len=file.read(buffer))!=-1){ String s=new String(buffer,0,len); System.out.print(s);} } catch (IOException e) {e.printStackTrace();}} }作业3-2作业3-2什么是流?流包含哪些种类?这些流都有什么作用?(3分) 缓冲流可能带来的问题是什么?(2分) 编写一个过滤流,该流能够读取指定格式的文件,该文件的格式如下: 文件存储的内容是一个基于GB2312字符集的文本文件,该文件的奇数字节存储的内容不变,但偶数字节的内容高4位与低4位互换。(8分)null下一章: Java 线程
本文档为【Java IO】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_832638
暂无简介~
格式:ppt
大小:307KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-02-24
浏览量:32