资源描述:
《第12章输入输出流、文件及数据库操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、37第十二章输入输出流、文件及数据库第十二章输入输出流、文件及数据库任何一个程序都有一个目的,即输入(提供)什么数据(信息)可输出(获得)所期望的结果。到目前为止,我们在程序中所讨论的输入和输出操作都是在标准设备文件上进行的。本章将简要介绍对数据流、数据文件和数据库文件的输入和输出操作。12.1输入输出流输入输出是程序设计的重要组成部分,任何程序设计语言都提供对输入输出的支持。Java也不例外,它采用数据流的形式传送数据。12.1.1流的概念所谓流(Stream),简单地说,即是计算机中数据的流动。程序运行需要取得数据,这些数据可以通过用户从键盘输入获得,也可以从磁盘文件调
2、入,还可以接收来自网络上的数据信息,程序在获得数据之后对其进行处理,并将处理结果输出到屏幕、磁盘文件或打印机上,也可输送到网络上(如远程打印机、网络用户等)。对程序而言,数据信息从某个地方流向程序中,这就是输入流;数据信息从程序中发送到某个目的地,这就是输出流。无论是输入流还是输出流,Java提供了如下两种方式进行处理:1)字节(byte)方式以字节方式处理的是二进制数据流(简称为字节流)。用二进制的格式可以表示许多类型的数据,比如数字数据、可执行程序代码、因特网通信和类文件代码等等。2)字符(character)方式以字符方式处理的数据流称为字符流。它不同于字节流,因为J
3、ava使用Unicode字符集,存放一个字符需要两个字节。因此这是一种特殊类型的字节流,它只处理文本化的数据。所有涉及文本数据处理,诸如文本文件、网页以及其它常见的文本类型都应该使用字符流。下边我们将分别介绍字节流和字符流的功能及应用。12.1.2字节流在输入和输出流中用到了许多类,它们形成了一种非常合理的结构,只要我们了解了它们之间的相互关系,就可以正确地使用了。下边我们先介绍字节输入流类的功能及应用。1.字节输入流类(InputStream)InputStream类是一个抽象类,它是字节输入流的顶层类。我们不能直接创建InputStream3737第十二章输入输出流、文
4、件及数据库对象,要进行字节输入流的操作,还要靠创建它的子类对象实现。InputStream类被放在java.io包中,它的派生结构如下:classjava.io.InputStream
5、-classjava.io.ByteArrayInputStream
6、-classjava.io.FileInputStream
7、-classjava.io.FilterInputStream
8、-classjava.io.BufferedInputStream
9、-classjava.io.DataInputStream
10、-classjava.io.LineNumberInputStream
11、
12、-classjava.io.PushbackInputStream
13、-classjava.io.ObjectInputStream
14、-classjava.io.PipedInputStream
15、-classjava.io.SequenceInputStream
16、-classjava.io.StringBufferInputStreamInputStream类中提供了一系列的方法用来完成从字节输入流读取数据的操作,下边简要介绍一些常用的方法及其应用。1)InputStream类的常用方法abstractintread()从输入流中读取一个字节并返回整数值(0~255)。如果流
17、中无字节可读,则返回-1。该方法是一个抽象方法,在其子类中实现它。intread(byte[] b)从输入流中读取字节放入字节数组b中并返回实际读取的字节数。intread(byte[] b,intoff,int len)从流中读取len个字节存入字节数组b从off开始的位置中,并返回实际读取的字节数。longskip(long n)从流中当前的位置跳过n个字节。intavailable()返回可以从流中读取的字节数。voidclose()关闭输入流。voidmark(int readlimit)在流中当前位置处做一个标记。以便其后使用reset()方法返回该点。如果在做了
18、标记之后又从流中读取了超过readlimit个字节,则标记无效。voidreset()将读取位置返回到标记的位置。如果之前没做标记或该流不支持标记将抛出异常。booleanmarkSupported()测试该流是否支持标记。注意:读取字节流的方法都引入了异常处理,如果遇到读错误,将抛出一个IOException异常;如果遇到对象为null,则抛出NullPointerException异常;如果使用数组超出范围,则抛出IndexOutOfBoundsException异常。2)使用字节输入流如前所述,使用字节输入流