收藏 分享(赏)

JAVA输出流.ppt

上传人:buyk185 文档编号:7039830 上传时间:2019-05-03 格式:PPT 页数:25 大小:147KB
下载 相关 举报
JAVA输出流.ppt_第1页
第1页 / 共25页
JAVA输出流.ppt_第2页
第2页 / 共25页
JAVA输出流.ppt_第3页
第3页 / 共25页
JAVA输出流.ppt_第4页
第4页 / 共25页
JAVA输出流.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、第6章 输入/输出和异常处理,熟练掌握对文本文件进行读写的方法 熟练掌握对二进制文件进行读写的方法 了解对象流的使用 掌握Java文件类的使用 掌握异常的处理,流的概念,在java中,所有的数据都是使用流来写入和读出的。 流:流是程序中数据所途径的一条路径。输入流将数据从某个数据源发送到程序中,输出流将数据从程序中发往某个目的端。 流的分类: 按流向分:输入流,输出流 按数据类型分:字符流,字节流 字符流:字符流处理的是字符系列,用于处理文本化的数据,通常的文本类型的文件都可用字符流来表示。 字节流:字节流处理的是字节系列,能够传送值的范围是0-255的整数,用于读写二进制数据。绝大部分的数据

2、都可用二进制流处理,如可执行程序,图象、声音,网络通讯等. 文件:计算机系统的所有设备都可理解为文件。文件和流进行关联,则可在文件和程序之间交换数据。,6.2 I/O流使用,Reader和InputStream是输入类的父类。 Reader类提供了读字符和字符数组的基本方法。 int read() 以整数的形式返回流中的下一个字符。 int read(char cbuf) 读取流中的数据到字符数组,返回实际读取字符的个数。 int read(char cbuf, int offset, int length)读取流中的数据到字符数组,offset为流中的第一个元素在数组中的索引,length为

3、要读取到字符数。返回值为实际读取得字符数。 InputStream类提供了读取字节和字节数组的基本方法。 int read()以整数的形式返回流中的下一个字节。 int read(byte buf)读取流中的数据到字节数组,返回实际读取字节的个数。 int read(byte buf, int offset, int length)读取流中的数据到字节数组,offset为流中的第一个元素在数组中的索引,length为要读取到字符数。返回值为实际读取得字符数。 read方法的返回值若为-1,则表明已经到了流的末尾。 long skip(long n) 跳过流中的若干字符(字节) void clo

4、se() 关闭流。,基本的输出类,Writer和OutputStream是输出类的超类。 Writer类提供了写字符和字符数组的基本方法。 void write(int c) 将整数对应的字符写入流。 void write(char cbuf) 将字符数组写入流。 void write(char cbuf, int offset, int length)将字符数组写入流,从offset指定的索引开始,写length个元素。 OutputStream类提供了写字节和字节数组的基本方法。 void write(int b)将整数的低八位对应的字节写入流。 int write(byte buf) 将

5、字节数组写入流。 int write(byte buf, int offset, int length)将字节数组写入流,从offset指定的索引开始,写length个元素。 void flush() 将缓冲的内容写到输出。 void close()关闭流。,文本文件的读写,FileReader, BufferedReader类的使用 FileWriter, PrintWriter类的使用. BufferedReader的常见用法 通过文件创建BuferedReader对象 BufferedReader in = new BufferedReader(new FileReader(fileNa

6、me); 使用系统输入流创建BufferedReader对象 BufferedReader in = new BufferedReader(new InputStreamReader(System.in); BufferedReader的常用方法 String str = in.readLine(); PrintWriter的常见用法 PrintWriter out = new PrintWriter(new FileWriter(fileName); out.println(); 【例】TextFileDemo.java,PrintStream类,二进制文件的读写,FileInputStre

7、am, DataInputStream类的使用 FileOutptStream, DataOutputStream的使用 DataInputStream和DataOutputStream封装了基本数据类型的读写方法 DataOutputStream writeInt(int i), writeDouble(double d), writeChar(int c),writeUTF(String) DataInputStream int readInt(); double readDouble(); char readChar(); String readUTF(); 【例】BinaryFileD

8、emo.java,System类中的标准输入输出流,static InputStream in:标准输入流,该流在java程序运行时自动打开。 static PrintStream out:标准输出流,该流在java运行时自动打开,准备接受数据。默认为显示器的输出屏幕。 static PrintStream err:标准错误输出流,该流在java运行后自动打开,准备接受数据。默认为显示器的输出屏幕。 用户可以通过setIn(),setOut()和setErr()方法重新指定标准输入,输出及标准错误输出流。 【例】从标准输入读入字符串SystemInDemo.java,随机访问流,RandomA

9、ccessFile类允许对文件的内容进行非顺序访问。 RandomAccessFile类既可用于读文件,又可用于写文件,其读写权限由构造器的第二个参数指定. 构造器: RandomAccessFile(File file, String mode) RandomAccessFile(String file, String mode) 第一个参数指定要读写的文件,第二个参数指定模式,mode的值可以下列值之一: “r” 以只读方式打开 “w” 以只写的方式打开 “rw” 以读、写的方式打开 “rwd” “rws” 以读、写的方式打开,同时要求改变文件的 内容的同时更新磁盘的上的内容。 例见课本1

10、83页6-4,StreamTokenizer类的使用,把一个输入流分析为多个“标记(token)”,允许一次读取一个标记。 构造函数:StreamTokenizer(Reader) 公共变量和方法: ttype:调用nextToken方法后,该属性包含当前标记的类型 TT_EOF :指示已读到流尾的一个常量。 TT_EOL:指示已读到行尾的一个常量。 TT_NUMBER :指示已读到一个数字标记的常量。 TT_WORD :指示已读到一个字标记的常量。 nvar:该属性为当前数字标记的值(double) svar:该属性为当前字符串值标记的值(String) nextToken():从输入流中分

11、析下一个标记 commentChar(int ch):指定注释行的标记字符 slashStarComments(boolean):是否忽略C语言注释 slashSlashComments(boolean):是否忽略C+注释 应用举例:Tokenizer.java,6.3 对象序列化,java.io包中的ObjectInputStream和ObjectOutputSteam类主要用于对对象的读写。 将对象写到流中(ObjectOutputStream) writeObject(Object obj) 【例】ObjectOutputDemo.java 从流中读取对象(ObjectinputStre

12、am) Object readObject() 【例】ObjectInputDemo.java 使自己定义的类能够串行化 只有实现了Serializable接口的类的对象才可以串行化。Serializable接口是一个空接口,你不必为接口实现方法。要使自己定义的类能被串行化,只需声明自己的类实现Serializable接口. 【例】SerializeDemo.java,6.4 文件管理,File类封装了对文件(目录)进行操作的功能和方法。如文件的复制,删除,重命名,和获取文件属性等操作。 File类的构造函数 File(String fileName) File(String parent,

13、String child) File(File parent, String child) File(URI uri) File类的方法 【例】完成类似dir命令的FileDemo.java,6.5 异常处理,理解错误与异常 了解异常的分类 掌握输出异常信息的方法 掌握处理异常的方法 掌握如何定义方法抛出异常,错误与异常,Java中的出错类型:错误和异常 错误:程序本身存在非法情形,主要是代码存在问题。如逻辑错误 异常:是在程序执行期间中断指令正常流程的事件。这种出错通常在代码的编写时无法预测,只有运行后才有可能发生。如:要打开的文件可能不存在,数据类型转换时数据格式可能不正确等,错误与异常(

14、续),错误的处理主要依赖于程序员的熟练程度和思维的严密性。异常是在运行中可能发生的错误,Java语言中采用异常处理机制来处理这类错误。 当一个方法中发生错误时,此方法创建一个对象,并将它交给运行时系统。此对象被称为异常对象。它包含错误的信息,错误的类型和错误发生时程序的状态。,异常的分类,在java运行时系统内部发生的异常:如算术常(被0除),指针异常(试图通过null引用访问对象的成员),索引异常(试图用太大或太小的索引访问数组的元素)等。 在java运行时系统外的代码发生的异常,如输入、输出期间发生的异常,网络连接异常。 Java语言要求用户必须捕捉系统外代码发生的异常,对于运行时内部发生

15、的异常,用户可以捕捉,也可以不捕捉。,输出异常信息,String getMessage():获得详细的信息。 String toString():返回对异常的一个简要说明,其中包括详细的信息(如果有的话)。 void printStackTrace()推荐使用 void printStackTrace(PrintStream):打印出Throwable和Throwable的调用堆栈路径,调用堆栈路径将我们带到异常发生抵达的方法调用顺序。 【例】ExceptionMethod.java,异常的处理,第一步:将包含了可能抛出异常的方法的代码放在一个try块中。 第二步:在catch块中处理异常。

16、try catch(ExceptionType1 var) try System.in.read(buffer,0,255); catch(IOException e) System.out.println(“cant read data.”); ,多异常的捕获和处理,每一个try块后面可以跟多个catch块,每个catch块是一个异常处理器,它处理由其参数值指定的异常类型。 /将数组元素写入文件 PrintWriter out = null; tryout=new PrintWriter(new FileWrier(“out.txt”); for(int i=0;isize;i+) out.

17、println(“value at ”+i+” = “+arrayi); catch(IOException e) System.out.println(“caught IOException.”); catch(ArrayIndexOutOFBoundsException e) System.out.println(“数组越界”); ,多异常的捕获和处理(续),如果某个方法抛出的异常为某个父类的子类,则在catch语句中可用父类异常来捕获所抛出的异常。 异常一般都是Exception类的子类,因而可用catch(Exception e)来捕获所有的异常。 异常是按从上到下的顺序来匹配。如果同

18、时捕获子类的异常和其父类的异常,子类的异常应该放在父类异常的前面,否则子类的异常处理器失效。,finally块,finally块无论try块中是否发生异常都会执行。finally块通常用于关闭文件或释放其它系统资源。,异常处理的程序流程,输出异常信息,退出系统,自己定义异常类,用户定义的异常类应当是Exception类的子类。 通常为自己定义的异常类添加两个构造函数:一个默认构造函数,一个以字符串为参数的构造函数。 public class UserNotFoundException extnds Exception public UserNotFound() public UserNotFound(String msg) super(msg); ,声明抛出异常的方法,格式: public 返回值 methodName(Param p)throws Exception throw new Exception(“异常信息”); 【例】Factorial.java,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报