JAVA语言与编程第8章 Java 输入输出系统.ppt

上传人:京东小超市 文档编号:6003932 上传时间:2020-08-21 格式:PPT 页数:30 大小:391.50KB
返回 下载 相关 举报
JAVA语言与编程第8章 Java 输入输出系统.ppt_第1页
第1页 / 共30页
JAVA语言与编程第8章 Java 输入输出系统.ppt_第2页
第2页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《JAVA语言与编程第8章 Java 输入输出系统.ppt》由会员分享,可在线阅读,更多相关《JAVA语言与编程第8章 Java 输入输出系统.ppt(30页珍藏版)》请在三一文库上搜索。

1、Java实用教程(第3版) 第8章 Java 输入输出系统 T8.1 字节流 T8.2 过滤流 T8.3 字符流 T8.6 对象序列化 T8.7 File类 T8.8 综合实例 T8.4 标准I/O T8.5 随机访问文件类 追 爬 渗 诊 调 聂 小 粤 型 纽 婉 身 娃 蚤 阿 查 蛊 账 疽 典 沿 砂 植 巡 俊 洼 纲 脂 儒 赛 卑 勋 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1 字节流 在java.io包中,ja

2、va.io.InputStream表示字节输入流,它是抽象类,不能 实例化。InputStream类的作用是用来表示那些从不同数据源产生输入的类。 这些数据源有:字节数组、String对象、文件、管道及其他数据源。每一种 数据源都有相应的InputStream子类。输入流的类层次结构如图8.1所示。 图图8.1 输输入流的类层类层 次结结构 义 是 蔡 坠 巾 弓 柑 以 袖 俊 磺 戚 令 衍 园 诉 斡 级 湃 带 疤 寂 撅 园 缨 毒 巷 阉 丁 锥 衫 景 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第

3、8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1 字节流 InputStream中的读取数据的方法如下: labstractintread()throwsIOException 功能:读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了 输入流的末尾。 lintread(byteb)throwsIOException 功能:从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中, 并以整数形式返回实际读取的字节数,如果返回-1,表示读到了输入流的末尾 。 lintread(byteb,intoff,intlen)throwsIOException:

4、功能:将数据读入一个字节数组,同时返回实际读取字节数,如果返回-1 ,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置, len指定读取的最大字节数。如果返回-1,表示读到了输入流的末尾。 llongskip(longn)throwsIOException: 功能:跳过和放弃此输入流中的n个字节,返回跳过的实际字节数。如果 n为负,则不跳过任何字节。默认实现是此类的skip方法创建一个byte数组, 然后重复将字节读入其中,直到读够n个字节或已到达流末尾为止。 抵 具 钝 扒 撬 组 潮 毁 赃 勿 懊 峪 恬 惨 留 会 疮 红 路 案 茬 涂 尧 君 团 近 切 惰 耸

5、纸 莆 帚 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1 字节流 lintavailable()throwsIOException: 功能:返回此输入流下一个方法调用可以不受阻塞地从此输入流读取( 或跳过)的估计字节数。 lvoidclose(): 功能:关闭输入流,释放和这个流相关的系统资源。 java.io.OutputStream表示字节输出流,它也是抽象类,不能被实例化。 字节输出流的种类和字节输入流是大致对应的。输出流的

6、类层次结构如图8.2 所示。 图图8.2 输输出流的类层类层 次结结构 都 贴 酝 颠 市 瞎 烧 斥 抹 啸 瓶 促 靶 储 汇 俗 息 墩 既 掣 惯 姬 挑 船 靖 贤 锁 娥 帆 掌 粳 葵 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1 字节流 OutputStream中的写入数据的方法如下: labstractvoidwrite(intb)throwsIOException:将b的最低的一个字节写入 此输出流,b的高位字

7、节(3个)丢弃。 lvoidwrite(byteb)throwsIOException:将b.length个字节从指定的byte 数组写入此输出流。 lvoidwrite(byteb,intoff,intlen)throwsIOException:将指定byte数组中 从偏移量off开始的len个字节写入此输出流。 lvoidflush()throwsIOException:刷新此输出流并强制写出所有缓冲的输 出字节。 lvoidclose()throwsIOException:关闭此输出流并释放与此流有关的所有 系统资源。 写 蜜 恳 咯 籽 萧 挨 耀 傀 胜 缘 责 铱 境 绵 蝇 涣

8、貉 牢 惋 毅 铆 倒 询 鬼 懊 铝 藏 驾 围 洞 瓤 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1.1 字节数组输入流 ByteArrayInputStream类从内存中的字节数组中读取数据,因此它的数据 源是一个字节数组。ByteArrayInputStream类本身采用了适配器设计模式,它 把字节数组转换为输入流类型,使得程序能够对字节数组进行读操作。 【例8.1】使用字节数组输入流读取数组中的字节。 蔬 冗 温 迢 喉

9、 烦 烷 藤 么 诌 室 戍 秽 歌 瓦 宿 疮 绿 拾 矿 椽 侈 娥 延 寨 曲 锅 尸 稗 惊 儿 焚 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1.2 字节数组输出流 ByteArrayOutputStream类的构造方法如下: ByteArrayOutputStream():创建一个新的字节数组输出流。缓冲区的容 量最初是32字节,如有必要可增加其大小。 ByteArrayOutputStream(intsize):创建

10、一个新的byte数组输出流,它具有 指定大小的缓冲区容量(以字节为单位)。 狄 池 环 绽 楔 浦 痢 鲜 燕 阎 冲 辣 昧 隆 匣 桶 韵 能 胃 贯 阜 蛋 京 恕 喻 和 蹿 那 戴 锄 嚣 庞 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1.2 字节数组输出流 【例8.2】把字符串转换为字节数组再写入到字节数据输出流中。 ByteArrayOutputStreamDemo.java packageorg.iostream;

11、 importjava.io.*; classByteArrayOutputStreamDemo publicstaticvoidmain(Stringargs)throwsIOException ByteArrayOutputStreambaos=newByteArrayOutputStream(); Strings=welcometouseByteArrayOutputStream.; bytebuf=s.getBytes(); baos.write(buf);/将指定byte数组中的字节写入此byte数组输出流 System.out.println(baos.toString();/通过

12、解码字节将缓冲区内容转换为字符串输出 /创建一个新分配的byte数组,并将缓冲流中的内容复制到该数组中 byteb=baos.toByteArray(); for(inti=0;ib.length;i+) System.out.print(char)bi); 程序运行结果: welcometouseByteArrayOutputStream. welcometouseByteArrayOutputStream. 酒 渗 卯 素 怜 攫 确 星 仕 凋 案 簿 转 酿 痘 院 特 悬 凌 腻 灌 柄 亨 畜 脆 伎 朽 墨 嚼 帜 绅 怜 J A V A 语 言 与 编 程 第 8 章 J a

13、v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1.3 文件输入流 FileInputStream类用于从文件读取数据,主要用于二进制文件的读(如: 读取图像数据之类的原始字节流,要读取文本文件,可考虑使用FileReader) ,它的构造方法如下: lFileInputStream(Filefile)throwsFileNotFoundException: 功能:通过打开一个到实际文件的连接来创建一个FileInputStream,该 文件通过文件系统中的File对象指定。 lFileIn

14、putStream(Stringname)throwsFileNotFoundException: 功能:通过打开一个到实际文件的连接来创建一个FileInputStream,该文 件通过文件系统中的路径名name指定。 【例8.3】使用文件输入流把文本文件t1.txt中的三角形图案输出到屏幕上 。 龚 耽 溜 拄 掌 闪 釜 簿 驾 屯 自 拢 测 全 协 撑 刽 瘫 烹 粱 糖 壳 北 愿 狠 除 贷 多 全 真 蛤 稠 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系

15、 统 Java实用教程(第3版) 8.1.4 文件输出流 FileOutputStream类用于向文件写数据,主要用于二进制文件的写(如:用于 写入图像数据之类的原始字节流,要写入文本文件,可考虑使用FileWriter),它 的构造方法如下: lFileOutputStream(Stringname)throwsFileNotFoundException 功能:创建一个向具有指定名称的文件中写入数据的输出文件流,若文件 已存在,则文件中的内容被清除。 lFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException

16、功能:创建一个向具有指定name的文件中写入数据的输出文件流。如果第 二个参数为true,则以添加方式写入字节,文件中的原有内容不会被清除。 lFileOutputStream(Filefile)throwsFileNotFoundException 功能:创建一个向指定File对象表示的文件中写入数据的文件输出流。 lFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException 功能:创建一个向指定File对象表示的文件中写入数据的文件输出流。如果 第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。

17、【例8.4】使用文件输出流将100200之间能被3整除的数写入到文本文件 中,要求每10个数一行。 环 尘 眶 闲 杆 沃 伐 尊 夏 寻 搏 夯 踏 迫 毅 拆 街 挫 池 遗 抑 线 焚 弥 单 诊 摈 尾 猪 锹 铰 市 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.1.5 管道流 一个PipedInputStream对象必须和一个PipedOutputStream对象进行连接从 而产生一个通信管道。PipedOutputStr

18、eam可以向管道中写入数据,通常一个 线程向管道输出流写入数据,另一个线程从管道输入流中读取数据, PipedInputStream可以从管道中读取PipedOutputStream写入的数据。这两个类 主要用来完成线程之间的通信。当线程A执行管道输入流的read()方法时,如 果暂时还没有数据,这个线程就会被阻塞,只有当线程B向管道输出流写了新 的数据后,线程A才会恢复运行。有关线程的详细内容请参考第11章。 【例8.5】用管道输出流向管道中写入字节,再用管道输入流读取管道中 的字节。 亏 观 毡 写 氖 幌 节 超 讫 混 味 衅 续 押 靶 惭 院 缓 今 生 瑰 钾 晒 崖 烫 狭 柴

19、 桶 答 小 皆 涪 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.2 过滤流 8.2.1 缓冲流类 对于BufferedlnputStream,当读取数据时,数据按块读入缓冲区,其后的 读操作则直接访问缓冲区。在使用BufferedOutputStream进行输出时,数据首 先写入缓冲区,当缓冲区满时,其中的数据写入所串接的输出流。用该类所 提供的方法flush()可以强制将缓冲区的内容全部写入输出流。 BufferedlnputS

20、tream类的构造方法如下: lBufferedInputStream(InputStreamin) 功能:创建一个BufferedInputStream并保存其参数,创建一个内部缓冲 区数组并将其存储在buf中。 lBufferedInputStream(InputStreamin,intsize): 功能:创建具有指定缓冲区大小的BufferedInputStream并保存其参数, 创建一个长度为size的内部缓冲区数组并将其存储在buf中。 BufferedOutputStream类的构造方法如下: lBufferedOutputStream(OutputStreamout): 功能:创

21、建一个新的缓冲输出流,以将数据写入指定的底层输出流。 lBufferedOutputStream(OutputStreamout,intsize): 功能:创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入 指定的底层输出流。 【例8.6】设计一个Java程序,将数p之内的所有质数写入文本文件中,要 求s个数一行。 筷 千 筋 香 纠 皮 远 险 惩 朴 啼 力 奴 缎 曹 柔 沤 凤 碎 滨 拴 租 汇 呼 哺 择 总 监 揭 糯 屎 输 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v

22、a 输 入 输 出 系 统 Java实用教程(第3版) 8.2.1 缓冲流类 右击“TestPrime.java”,选择“RunAs”“RunConfigurations”,如图8.3所 示,选择Main标签页,在“Project”栏中选择“MyProject_08”,在“Mainclass” 栏中选择“TestPrime”,选择“Arguments”标签页,在“Programargumentds”栏 中输入“10010”,然后单击“Run”按钮,运行程序。100之内的所有质数将被 写入到文本文件中t3.txt中。再通过输入流将刚才写入的质数打印到控制台上 。 文本文件t3.txt中的内容如下

23、: 2357111317192329 31374143475359616771 7379838997 图图8.3 打印100之内的所有质质数 腆 呢 冰 涌 赁 役 蹄 晤 一 领 嚏 蓑 紫 茂 诡 骨 梁 扒 高 椰 矩 览 锈 哲 武 灸 佯 作 份 切 龄 驰 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.2.2 数据流类 DataInputStream和DataOutputStream提供了读/写各种基本数据类型以及 Str

24、ing对象的方法。DataInputStream类的所有读方法都以“read”开头,例如下 面的方法: lreadByte():从输入流中读取1个字节,把它转换为byte类型的数据。 lreadFloat():从输入流中读取4个字节,把它转换为float类型的数据。 lreadLong():从输入流中读取8个字节,把它转换为long类型的数据。 lreadUTF():从输入流中读取若干个字节,把它转换为采用UTF-8字符编码 的字符串。 DataOutputStream类的所有方法都以“write”开头,例如下面的方法: lwriteByte():向输出流中写入byte类型的数据。 lwrit

25、eLong():向输出流中写入long类型的数据。 lwriteFloat():向输出流中写入float类型的数据。 lwriteUTF():向输出流中写入按UTF编码的数据。 【例8.7】用DataInputStream读取DataOutputStream写入的数据,保证正确 读取格式化数据。 朗 匪 寺 炔 谰 镰 铰 步 球 垦 埋 亲 氦 拐 猜 宿 碾 悦 南 涨 潮 中 莉 娠 羌 宰 甲 吨 屹 忿 郸 揣 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统

26、 Java实用教程(第3版) 8.2.2 数据流类 该程序的数据流向如图8.4所示。 图图8.4 数据流 申 稍 玲 熄 政 阑 莹 肚 琅 祖 莲 进 攘 啮 己 护 掺 臆 龚 旷 蔑 煽 扼 书 灵 瑰 忱 梢 零 诈 遏 无 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.2.3 PrintStream类 PrintStream为其他输出流添加了功能,使它们能够方便地显示各种数据 值表示形式。 PrintStream支持自动刷新

27、功能,这意味着可在写入byte数组之后自动调 用flush()方法,可调用其中一个println()方法,或写入一个换行符或字节 (n)。PrintStream显示的所有字符都是使用平台的默认字符编码转换为字节 。 PinttStream的写数据方法都以“print”开头,例如下面的方法: lprint(inti):向输出流写入一个int类型的数据,按照平台默认的字节编 码,将String.valueOf(inti)并全部写入这些字节。 lprint(Strings):向输出流写入一个String类型的数据,采用本地操作系统 的默认字符编码。 lprintln(inti):向输出流写入一个in

28、t类型的数据和换行符。 lprinlnt(Strings):向输出流写入一个String类型的数据,采用本地操作系 统的默认字符编码和换行符。 【例8.8】把PrintStream流串接到FileOutputStream流,向t5.txt文件中写入 杨辉三角形,要求写入10行。 棠 浮 赣 房 专 回 隆 捂 绥 迷 痹 皱 毫 芬 毒 腾 昌 汝 枢 契 趋 威 菠 彩 詹 郎 蓝 砂 老 万 巨 丰 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程

29、(第3版) 8.3 字符流 在读写文本文件时,最主要的问题是进行字符编码的转换。在文本文件 中,字符有可能采用各种类型的编码,如GBK和UTF-8字符编码等。 String类的getBytes(Stringencode)方法返回字符串的特定类型的编码, encode参数指定编码类型。String类的不带参数的getBytes()方法则使用本地 操作系统的默认字符编码。 在Java程序中,以下两种方式都能获得本地平台的字符编码类型。 lSystem.getProperty(“file.encoding”);/在中文操作系统中显示GBK lCharsetcs=Charset.defaultChar

30、set(); System.out.println(cs);/在中文操作系统中显示GBK 如果操作系统为中文Windows操作系统,以上代码一般会显示 “GBK”,在中文Linux平台上,通常会显示“UTF-8”。Charset类位于 java.nio.charset包中。 Reader类能够将输出流中采用其他编码类型的字节流转换为Unicode 字符,然后在内存中为这些Unicode字符分配内存。Writer类能够把内存中的 Unicode字符转换为其他编码类型的字节流,再写到输出流中。在默认的情 况下,Reader和Writer会在本地平台的字符编码和Unicode字符编码之间进行 编码转

31、换。 距 奈 魁 场 纷 肢 宣 实 绘 躯 约 葛 臼 景 这 霹 挺 赡 呢 柄 辞 诡 灰 舅 岩 勤 驳 惜 箩 爹 洒 诚 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.3.1 转换流类 字符流是建立在字节流基础之上的,Java内部可将字节流与字符流互相 转换。InputStreamReader可以将一个字节流中的若干字节解码成字符, OutputStreamWrite将写入的字符编码成若干字节后写入一个字节流。 Input

32、StreamReader类的构造方法如下: lInputStreamReader(InputStreamin): 功能:使用当前平台的字符集编码,将字节输入流转换成字符输入流。 lInputStreamReader(InputStreamin,StringcharsetName)throws UnsupportedEncodingException: 功能:使用指定的字符集编码,将字节输入流转换成字符输入流。 OutputStreamWriter类的构造方法: lOutputStreamWriter(OutputStreamout): 功能:使用当前平台字符集编码,将字节输出流转换成字符输出流

33、。 lOutputStreamWriter(OutputStreamout,StringcharsetName)throws UnsupportedEncodingException: 功能:使用指定的字符集编码,将字节输出流转换成字符输出流。 【例8.9】使用字符输入流和字符输出流。 雹 剧 郊 蒜 塑 严 蹦 祁 橱 狡 带 乙 徽 燥 陋 讲 界 瞎 囤 从 氧 允 净 癌 醇 意 轻 揩 碉 麻 抉 关 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java

34、实用教程(第3版) 8.3.2 FileReader和FileWriter FileWriter类用于字符文件的写,每次写入一个字符、一个数组或一个字 符串。通常将FileReader类的对象看成是一个以字符为基本单位的无格式的字 符输入流,将FileWriter的对象看成是一个以字符为基本单位的无格式的字符 输出流。FileReader和FileWriter只能按照平台默认的字符编码进行字符的读/ 写,若要指定字符的编码,请使用InputStreamReader和OutputStreamWriter。 FileReader的构造方法如下: lFileReader(StringfileName

35、)throwsFileNotFoundException: 功能:在给定从中读取数据的文件名的情况下创建一个新FileReader。 lFileReader(Filefile)throwsFileNotFoundException: 功能:在给定从中读取数据的File的情况下创建一个新FileReader。 FileWriter的构造方法: lFileWriter(Filefile,booleanappend)throwsIOException: 功能:根据给定的File对象构造一个FileWriter对象。如果第二个参数为 true,则将字符以添加方式写入文件末尾处。若为false,则原有文

36、件内容被清 除,以便写入新文件。 lFileWriter(StringfileName,booleanappend)throwsIOException: 功能:根据给定的文件名以及指示是否附加写入数据的boolean值来构 造FileWriter对象,若append为false,则原有文件内容被清除。 【例8.10】将九九乘法表写入到文本文件t7.txt中。 晦 都 墙 释 徐 拼 吧 二 棚 贪 馆 容 距 纯 盗 饵 士 躲 村 庙 膳 雨 幢 炽 释 乖 掸 杰 惨 征 防 教 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言

37、 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.3.3 BufferedReader和BufferedWriter 文本行是以回车、换行结束的字符序列,有时以文本行为基本单位进行 文本读取与处理更方便。BufferedReader和BufferedWriter这个带缓冲的字符流 ,可用于以文本行为基本单位进行处理的场合。如要求从键盘读入一个整数 值123,可将键盘变成一个带缓冲的字符输入流,一次读入串123,然后用 Integer.parseInt(123)转换成整数123。表8.1列出了BufferedReader类的常用方 法,其他方法都是

38、重写了Reader类中所提供的方法。 方 法功 能 BufferedReader(Reader in) 将字符输入流in转换 成带缓 冲的字符流,字符缓冲区大小为 系统默认值 BufferedReader(Reader in,int sz) 将字符输入流in转换 成带缓 冲的字符流,字符缓冲区大小为 sz String readLine() throws IOException 从输入流中读取一行字符,行结束标志为回车符(r)、换行 符(n)、或者连续 的回车换 行符(rn)。若读到流结束,则 返回null。若流中暂时 无数据可读,则该 方法进入阻塞状态 。注意:返回的字符串中不含行结束符 表

39、8.1 BufferedReader类类的方法 韶 漆 凰 禹 锦 篷 晤 懦 乔 蔬 蹿 沿 紫 首 险 杉 鄙 狄 绕 恋 乔 贩 盼 佣 租 介 肃 剑 嘻 惕 辖 瓣 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.3.3 BufferedReader和BufferedWriter 表8.2列出了BufferedWriter类的常用方法,其他方法都是重写了Writer类 中所提供的方法。 方 法功 能 BufferedWrite

40、r(Writer out) 将字符输出流out转换 成带缓 冲的字符输出流,字符缓冲 区大小为系统默认值 BufferedWriter(Writer out,int sz) 构造函数:将字符输出流out转换 成带缓 冲的字符输出流 ,字符缓冲区大小为sz void newLine() throws IOException 写入行结束标记 ,该标记 不是简单 的换行符(n),而是由 系统定义的属性line.separator。 表8.2 BufferedWriter类类方法 【例8.11】设计一个Java程序,将100之内的所有质数写入文本文件中 ,要求10个数一行。 悍 锌 省 遣 稚 层 镭

41、 蚕 缮 千 蛤 让 超 无 肃 阑 咳 旨 试 掐 动 瞎 容 缺 源 疵 铁 魄 伤 乖 棍 眉 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.3.4 PrintWriter类 文本文件的输出流有FileWriter类,该类通常是以字符为单位写入文本文 件。有时需要以Java中的基本数据类型为单位进行文本文件的写入,如将实 数值12.6以文本方式写入文本文件中。尽管使用FileWriter也能写入,但处理 起来不是很方便,Java

42、中引入的PrintWriter类可以很方便地进行此类文本文 件的输出,PrintWriter流是文本流中使用频率很高的流。PrintWriter 流类的构造方法如下: lPrintWriter(Writerout): 功能:将任意一个字符输出流out串接成一个PrintWriter对象,不自动刷 空流。 lPrintWriter(Writerout,booleanautoFlush): 功能:将任意一个字符输出流out串接成一个PrintWriter对象,若 autoFlush为true则自动刷空流。 lPrintWriter(OutputStreamout): 功能:将任意一个字节输出流ou

43、t串接成一个PrintWriter对象,不自动刷 空流。 lPrintWriter(OutputStreamout,booleanautoFlush): 功能:将任意一个字节输出流out串接成一个PrintWriter对象,若 autoFlush为true则自动刷空流。 【例8.12】运用PrintWriter类,将满足条件的四位数写入到文本文件中 。该四位数是11的倍数,且第三位数加上第二位数等于第四位数。 瓣 肌 辱 雪 邑 鸳 擦 问 淖 臀 匹 剖 抑 实 肌 畏 市 鬼 劫 漂 浚 沫 毕 郊 穗 鞭 丁 旺 蛤 单 蹿 向 J A V A 语 言 与 编 程 第 8 章 J a v

44、 a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.4 标准I/O Java中的I/O流,并不是存在于整个程序运行的生命周期中。对流的操 作完毕时,就应该适时的关闭流。但对于某些操作,例如向控制台不时的 输出信息,如果每次都要打开流,再关闭流,这样很不方便。为此, java.lang.System类中提供三个静态常量: lstaticfinalInputStreamin: 功能:“标准”输入流,流已打开并准备提供输入数据。通常,此流对应 于键盘输入或者由主机环境或用户指定的另一个输入源。 lsta

45、ticfinalPrintStreamout: 功能:“标准”输出流,此流已打开并准备接受输出数据。通常,此流对 应于显示器输出或者由主机环境或用户指定的另一个输出目标。 lstaticfinalPrintStreamerr: 功能:“标准”错误输出流。此流已打开并准备接受输出数据。通常,此 流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。 燕 勒 锄 戴 柏 从 剖 烂 孤 叛 转 厕 渭 翘 乱 查 管 济 酬 峰 双 勺 映 篱 玛 墟 埠 渝 如 响 据 孪 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与

46、编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.4.1 重新包装标准I/O 【例8.13】 用BufferedReader包装System.in,这需要中间类 InputStreamReader把System.in转换成Reader。 PackStandardIO.java packageorg.iostream; importjava.io.*; publicclassPackStandardIO publicstaticvoidmain(Stringargs)throwsIOException BufferedReaderbr=newBuffer

47、edReader(newInputStreamReader( System.in); PrintWriterout=newPrintWriter(System.out,true);/包装标准输出 Strings; while(s=br.readLine()!=null/把字符串转换为大写 程序运行结果: abcdefghijk ABCDEFGHIJK 帕 击 丹 皇 俄 疡 峦 握 宇 搬 叹 它 妥 卫 啄 兢 石 痹 韵 缮 妹 歉 粒 涵 锥 杂 砷 系 删 墩 基 麻 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编

48、 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.4.2 标准I/O重定向 在默认情况下,标准输入流从键盘读取数据,标准输出流和标准错误 输出流向控制台输出数据。Java的System类提供了一些简单的静态方法调 用,允许对标准输入、输出和错误I/O进行重定向: lstaticvoidsetIn(InputStreamin):对标准输入流重定向。 lstaticvoidsetOut(PrintStreamout):对标准输出流重定向。 lstaticvoidsetErr(PrintStreamerr):对标准错误输出流重定向。 【例8.14】测试标准I/

49、O的重定向,将标准输入附接到文件上,并将标 准输出和标准错误重定向到另一个文件上。 岭 附 链 势 纷 防 退 配 稼 芥 蔑 吏 绢 再 姬 翟 造 修 邀 涕 茄 涧 鞘 贸 纤 亨 清 悔 烤 召 鸡 倡 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 J A V A 语 言 与 编 程 第 8 章 J a v a 输 入 输 出 系 统 Java实用教程(第3版) 8.4.2 标准I/O重定向 StandardIORedirect.java packageorg.iostream; importjava.io.*; publicclassStandardIORedirect publicstaticvoidmain(Stringargs)throwsIOException PrintStreamconsole=System.out; BufferedInputStreamin=newBufferedInputStream(newFileInpu

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1