没有合适的资源?快使用搜索试试~ 我知道了~
第12章输入输出流、文件及数据库操作.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 151 浏览量
2021-10-03
14:52:15
上传
评论
收藏 425KB DOC 举报
温馨提示
试读
45页
第12章输入输出流、文件及数据库操作.doc
资源推荐
资源详情
资源评论
1第十二章 输入输出流、文件及数据库
第十二章 输入输出流、文件及数据库
任何一个程序都有一个目的,即输入(提供)什么数据(信息)可输出(获得)所期望的结果。
到目前为止,我们在程序中所讨论的输入和输出操作都是在标准设备文件上进行的。本章
将简要介绍对数据流、数据文件和数据库文件的输入和输出操作。
12.1 输入输出流
输入输出是程序设计的重要组成部分,任何程序设计语言都提供对输入输出的支持 。
Java 也不例外,它采用数据流的形式传送数据。
12. 流的概念
所谓流〔Stream〕,简单地说,即是电脑中数据的流动。
程序运行需要取得数据,这些数据可以通过用户从键盘输入获得,也可以从磁盘文件
调入,还可以接收来自网络上的数据信息,程序在获得数据之后对其进行处理,并将处理
结果输出到屏幕、磁盘文件或打印机上,也可输送到网络上〔如远程打印机、网络用户
等〕。
对程序而言,数据信息从某个地方流向程序中,这就是输入流;数据信息从程序中发
送到某个目的地,这就是输出流。
无论是输入流还是输出流,Java 提供了如下两种方式进行处理:
1) 字节〔byte〕方式
以字节方式处理的是二进制数据流〔简称为字节流〕。
用二进制的格式可以表示许多类型的数据,比方数字数据、可执行程序代码、因特网
通信和类文件代码等等。
2〕字符(character)方式
以字符方式处理的数据流称为字符流。它不同于字节流,因为 Java 使用 Unicode 字符
集,存放一个字符需要两个字节。因此这是一种特殊类型的字节流,它只处理文本化的数
据。所有涉及文本数据处理,诸如文本文件、网页以及其它常见的文本类型都应该使用字
符流。
下边我们将分别介绍字节流和字符流的功能及应用。
1
Java 语言程序设计教程
12.1.2 字节流
在输入和输出流中用到了许多类,它们形成了一种非常合理的结构,只要我们了解了
它们之间的相互关系,就可以正确地使用了。
下边我们先介绍字节输入流类的功能及应用。
1. 字节输入流类〔InputStream〕
InputStream 类 是 一 个 抽 象 类 , 它 是 字 节 输 入 流 的 顶 层 类 。 我 们 不 能 直 接 创 建
InputStream 对象,要进行字节输入流的操作,还要靠创建它的子类对象实现。InputStream
类,它的派生结构如下:
class java.io.InputStream
|-class java.io.ByteArrayInputStream
|-class java.io.FileInputStream
|-class java.io.FilterInputStream
|-class java.io.BufferedInputStream
|-class java.io.DataInputStream
|-class java.io.LineNumberInputStream
|-class java.io.PushbackInputStream
|-class java.io.ObjectInputStream
|-class java.io.PipedInputStream
|-class java.io.SequenceInputStream
|-class java.io.StringBufferInputStream
InputStream 类中提供了一系列的方法用来完成从字节输入流读取数据的操作,下边简
要介绍一些常用的方法及其应用。
1〕InputStream 类的常用方法
abstract int read() 从输入流中读取一个字节并返回整数值〔0~255〕。如果流中无字
节可读,则返回-1。该方法是一个抽象方法,在其子类中实现它。
int read(byte[]$b) 从输入流中读取字节放入字节数组 b 中并返回实际读取的字节数。
int read(byte[]$b, int off, int$len) 从流中读取 len 个字节存入字节数组 b 从 off 开始的位置
中,并返回实际读取的字节数。
long skip(long$n) 从流中当前的位置跳过 n 个字节。
int available() 返回可以从流中读取的字节数。
void close() 关闭输入流。
void mark(int$readlimit) 在流中当前位置处做一个标记。以便其后使用 reset()方法返回
该点。如果在做了标记之后又从流中读取了超过 readlimit 个字节,则标记无效。
void reset() 将读取位置返回到标记的位置。如果之前没做标记或该流不支持标记将抛
出异常。
boolean markSupported() 测试该流是否支持标记。
2
3第十二章 输入输出流、文件及数据库
注意:读取字节流的方法都引入了异常处理,如果遇到读错误,将抛出一个
IOException 异常;如果遇到对象为 null,则抛出 NullPointerException 异常;如果使用数组
超出范围,则抛出 IndexOutOfBoundsException 异常。
2〕 使用字节输入流
如前所述,使用字节输入流的操作需要创建 ImputStream 子类的对象来实现。下边我们
先介绍一下 DataInputStream 子类,然后再举一个例子,说明一下字节输入流的操作。
〔1〕DataInputStream 构造方法
DataInputStream(InputStream$in) 用基本的 InputStream 对象 in 创建对象。
〔2〕DataInputStream 常用方法
除了继承父类的所有方法之外,还实现了 DataInput 接口中所有的方法,这些方法主要
是读取各类数据,除了读取八种(boolean,byte,char,short,int,float,long, double) 基本类型数据
的方法外,还有如下方法:
int readUnsignedByte() 以无符号字节数的方式读取流中的数据。
int readUnsignedShort() 以无符号短整数的方式读取流中的数据。
String readUTF() 以 UTF-8 数据格式读取流中的数据。
static$String readUTF(DataInput$in) 以 UTF-8 数据格式读取由 in 指定流中的数据。
int skipBytes(int$n) 跳读 n 个字节。
〔3〕应用举例
例 12.1 从键盘上输入 5 个字节数据放入字节数组中并显示出来。
/* 程序名 ByteInputStreamApp.java*/
import java.io.*;
public class ByteInputStreamApp
{
public static void main(String [] args)
{
byte byteArray[]=new byte[5]; //定义字节数组
DataInputStream data=new DataInputStream(System.in);//创建对象
try //捕获 I/O 错误
{
System.out.print("从键盘上输入 5 个字节数据:");
data.read(byteArray); //从键盘上输入字节数据放入数组中
}
catch(IOException e)
{
System.out.println(e.toString()); //输出出错信息
}
System.out.print("从流中获取的 5 个字节数据: ");
for(int i=0;i<5;i++) System.out.print(byteArray[i]+" ");
System.out.println("");
3
Java 语言程序设计教程
}
}
在程序中,我们使用 System.in 创建数据输入流对象,如前所述既是 System 类的一个
属性成员也是一个 InputStream 对象。
另外,我们使用了 try~catch 捕获异常机制的语句,主要是捕获 data.read (byteArray)语
句执行过程中可能发生的 I/O 错误,这是系统要求的,对于所有涉及流输入和输出的语句
都必须对可能出现的错误进行捕获的处理,如果没有捕获错误的处理,系统在编译时将给
出错误提示,程序编译未能获得通过。
编译、运行上边的程序,结果如图 12.1 所示。程序运行时,我们从键盘上输入 5 个字
符,它们被放入字节数组中,输出它们的值,它们以 ascii 码值的形式展现在我们面前。
图 12.1 例 12.1 运行结果
2. 字节输出流〔OutputStream〕
与 InputStream 类 似 , OutputStream 是 字节 输 出 流 的 顶 层 类 , 它 也 是 一 个 抽 象 类 。
OutputStream 类的派生结构如下:
|-class java.io.OutputStream
|-class java.io.ByteArrayOutputStream
|-class java.io.FileOutputStream
|-class java.io.FilterOutputStream
|-class java.io.BufferedOutputStream
|-class java.io.DataOutputStream
|-class java.io.PrintStream
|-class java.io.ObjectOutputStream
|-class java.io.PipedOutputStream
OutputStream 类中定义了用来完成从输出流输出数据的—系列方法。下边简要介绍一
些常用的方法及其应用。
1〕OutputStream 类常用方法
abstract void write(int$b) 将 b 的低位字节写入到输出流。这是一个抽象方法,需要在其
子类中实现它。
void write(byte[]$b) 把字节数组 b 写入输出流。
void write(byte[]$b,int$off,int$len) 把字节数组 b 中从 off 位置开始的 len 个字节写入输出
流。
void flush() 立即将流缓冲区中的数据输出。正常情况下,写入数据到输出流时,
write()方法并不能将数据直接写到与输出流相连的设备上,而是先存放在流缓冲区中,等
4
5第十二章 输入输出流、文件及数据库
到缓冲区中的数据积累到一定数量时才写到设备上。这样处理可以降低电脑对设备的读写
次数,提高系统的效率。但是某些情况下,缓冲区中的数据不满时就需要将它写到设备上,
诸如数据的写入已经完成、关闭输出流之前等,均应执行 flush()方法。
void close() 关闭输出流。该方法先执行 flush()方法把缓冲区中的数据写到流设备上,
然后再关闭输出流。
注意:与 InputStream 类似,写入字节流的方法也都引入了异常处理,如果遇到写错误,
将抛出一个 IOException 异常。
2〕 使用字节输出流
与使用字节输入流类似,使用字节输出流的操作也需要创建 OutputStream 子类的对象
来实现。下边先介绍一下 DataOutputStream 子类,然后再举一个例子,说明一下字节输出
流的操作。
〔1〕DataOutputStream 构造方法
DataOutputStream(OutputStream$out) 以 OutputStream 对象 out 为参数创建对象。
〔2〕DataOutputStream 常用方法
除了继承父类的所有方法之外,还实现了 DataOutput 接口中所有的方法,这些方法主
要是写入各类数据,除了写入八种(boolean,byte,char,short,int,float,long, double) 基本类型数
据的方法〔writedataType(dataType v)〕外,还提供了如下常用方法:
int size() 返回迄今为止写入流中的字节计数。
void writeChars(String$s) 将字符串 s 写入到输出流中。
void writeUTF(String$str) $将字符串 str 以 UTF-8 格式写入到输出流中。
〔3〕应用举例
例 12.2 修改例 12.1,从键盘上输入 5 个字节数据放入字节数组中并将它写入基本的输
出流中。
/* 程序名 ByteOutputStreamApp.java*/
import java.io.*;
public class ByteOutputStreamApp
{
public static void main(String [] args)
{
byte byteArray[]=new byte[5]; //定义字节数组
DataInputStream data=new DataInputStream(System.in);//创建对象
DataOutputStream out=new DataOutputStream(System.out);
try //捕获 I/O 错误
{
System.out.print("从键盘上输入 5 个字节数据:");
data.read(byteArray); //从键盘上输入字节数据放入数组中
System.out.print("将字节数组写出的结果: ");
out.write(byteArray); //将字节数组写出
}
5
剩余44页未读,继续阅读
资源评论
zhangao_fengg
- 粉丝: 17
- 资源: 5万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功