输入输出流和文件

上传人:kms****20 文档编号:51668309 上传时间:2018-08-15 格式:PPT 页数:119 大小:1.12MB
返回 下载 相关 举报
输入输出流和文件_第1页
第1页 / 共119页
输入输出流和文件_第2页
第2页 / 共119页
输入输出流和文件_第3页
第3页 / 共119页
输入输出流和文件_第4页
第4页 / 共119页
输入输出流和文件_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《输入输出流和文件》由会员分享,可在线阅读,更多相关《输入输出流和文件(119页珍藏版)》请在金锄头文库上搜索。

1、第六章 输入/输出流和文件郑莉JAVA语言程序设计目录l6.1 输入/输出流l6.2 文件读写l6.3 本章小结26.1 输入/输出流l通常程序需要从外部获取/输出信息 这个“外部”范围很广,包括诸如键盘、 显示器、文件、磁盘、网络、另外一个 程序等 “信息”也可以是任何类型的,例如一个 对象、串字符、图像、声音等l通过使用java.io包中的输入/输出流类 就可以达到输入输出信息的目的36.1.1 I/O流的概念 lI/O流(Input/Output) 在Java中将信息的输入与输出过程抽象为I/O流l输入是指数据流入程序l输出是指数据从程序流出 一个流就是一个从源流向目的地的数据序列 IO

2、流类一旦被创建就会自动打开 通过调用close方法,可以显式关闭任何一个流 ,如果流对象不再被引用,Java的垃圾回收机 制也会隐式地关闭它输入/输出流4l输入流 为了从信息源获取信息,程序打开一个输入流,程序可 从输入流读取信息l输出流 当程序需要向目标位置写信息时,便需要打开一个输出 流,程序通过输出流向这个目标位置写信息6.1.1 I/O流的概念(续) 输入/输出流5对象源? 目标? 或两者?disk filerunning programmonitorkeyboardInternet connectionimage scannermouseBothBothDestinationSour

3、ceBothSourceSource输入/输出流6.1.1 I/O流的概念(续) 源和目标的类型6l不论数据从哪来,到哪去,也不论数据本 身是何类型,读写数据的方法大体上都是 一样的:6.1.1 I/O流的概念(续) 读写数据的方法读写打开一个流 读信息 关闭流打开一个流 写信息 关闭流输入/输出流76.1.2 预定义的I/O流类概述l输入/输出流可以从以下几个方面进行分类 从流的方向划分l输入流l输出流 从流的分工划分l节点流l处理流 从流的内容划分l面向字符的流l面向字节的流输入/输出流8l面向字符的流:专门用于字符数据l面向字节的流:用于一般目的6.1.2 预定义的I/O流类概述(续)

4、java.io包的顶级层次结构输入/输出流9输入/输出流6.1.2 预定义的I/O流类概述(续)面向字符的流l面向字符的流 针对字符数据的特点进行过优化,提供 一些面向字符的有用特性 源或目标通常是文本文件10l实现内部格式和文本文件中的外部格式 之间转换 内部格式:16-bit char 数据类型 外部格式:lUTF(Universal character set Transformation Format):很多人称之为 “Universal Text Format“l包括ASCII 码及非ASCII 码字符,比如: 斯拉 夫(Cyrillic)字符, 希腊字符,亚洲字符等6.1.2 预定

5、义的I/O流类概述(续)面向字符的流输入/输出流11l面向字符的抽象类Reader和Writer java.io包中所有字符流的抽象基类 Reader提供了输入字符的API Writer提供了输出字符的API 它们的子类又可分为两大类l节点流:从数据源读入数据或往目的地写出数据l处理流:对数据执行某种处理 多数程序使用这两个抽象类的一系列子类来读 入/写出文本信息l例如FileReader/FileWriter用来读/写文本文件6.1.2 预定义的I/O流类概述(续)面向字符的流输入/输出流126.1.2 预定义的I/O流类概述(续)面向字符的流输入/输出流阴影部分为节点流13l数据源或目标中

6、含有非字符数据,必 须用字节流来输入/输出l通常被用来读写诸如图片、声音之类 的二进制数据l绝大多数数据是被存储为二进制文件 的,世界上的文本文件大约只能占到 2,通常二进制文件要比含有相同 数据量的文本文件小得多6.1.2 预定义的I/O流类概述(续)面向字节的流输入/输出流14lInputStream和OutputStream 是用来处理8位字节流的抽象基类,程序 使用这两个类的子类来读写8位的字节信 息 分为两部分l节点流l处理流6.1.2 预定义的I/O流类概述(续)面向字节的流输入/输出流156.1.2 预定义的I/O流类概述(续)面向字节的流输入/输出流阴影部分为节点流16l标准输

7、入输出流对象 System类的静态成员变量 包括lSystem.in: InputStream类型的,代表标 准输入流,这个流是已经打开了的,默认状 态对应于键盘输入。lSystem.out:PrintStream类型的,代表标 准输出流,默认状态对应于屏幕输出lSystem.err:PrintStream类型的,代表标 准错误信息输出流,默认状态对应于屏幕输 出6.1.2 预定义的I/O流类概述(续)标准输入输出输入/输出流176.1.2 预定义的I/O流类概述(续)标准输入输出l标准I/O重新导向 setIn(InputStream): 设置标准输入流 setOut(PrintStream

8、):设置标准输出流 setErr(PrintStream):设置标准错误输出流输入/输出流18l从键盘读入信息并在显示器上显示import java.io.*;public class Echo public static void main(String args) throws IOException BufferedReader in = new BufferedReader(new InputStreamReader(System.in);String s;while(s = in.readLine().length() != 0)System.out.println(s); 6.1.

9、2 预定义的I/O流类概述(续)例6_1输入/输出流运行结果 Hello! Hello! 19lSystem.in 程序启动时由Java系统自动创建的流对象,它是 原始的字节流,不能直接从中读取字符,需要对 其进行进一步的处理lInputStreamReader(System.in) 以System.in为参数创建一个 InputStreamReader流对象,相当于字节流和字 符流之间的一座桥梁,读取字节并将其转换为字 符lBufferedReader in 对InputStreamReader处理后的信息进行缓冲, 以提高效率6.1.2 预定义的I/O流类概述(续)例6_1说明输入/输出流

10、20Java SE 5.0新特性l Java 5.0终于也有了自己的printf! out.printf(“%-12s is %2d long”, name, l); out.printf(“value = %2.2F”, value); %n 是平台无关的换行标志l一个方便的扫描API: 把文本转化成基本类 型或者String Scanner s = new Scanner(System.in); int n = s.nextInt(); 还有下列方法: next.Byte(),nextDouble(),nextFloat,nextInt(), nextLine(),nextLong(),n

11、extShort()21l重导向标准输入System.in和标准输出System.out import java.io.*; public class Redirecting public static void main(String args) throws IOException BufferedInputStream in = new BufferedInputStream(new FileInputStream( “Redirecting.java“);PrintStream out = new PrintStream( new BufferedOutputStream( new F

12、ileOutputStream(“test.out“);System.setIn(in);System.setOut(out);System.setErr(out);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);String s;while(s = br.readLine() != null) System.out.println(s);out.close(); / Remember this! 6.1.2 预定义的I/O流类概述(续)Redirecting.java输入/输出流22l处理流 不直

13、接与数据源或目标相连,而是基于另一个流来构造 从流读写数据的同时对数据进行处理 例6-1中的InputStreamReader和BufferedReader都属于处理流lInputStreamReader读取字节并转换为字符lBufferedReader对另一个流产生的数据进行缓冲6.1.2 预定义的I/O流类概述(续)处理流输入/输出流23用一行表达式实现: BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in) ); 6.1.2 预定义的I/O流类概述(续)处理流输入/输出流24l IO异常 多

14、数IO方法在遇到错误时会抛出异常,因此调用这些方法时必须l在方法头声明抛出IOException异常l或者在try块中执行IO,然后捕获 IOException6.1.2 预定义的I/O流类概述(续)I/O异常输入/输出流256.2 文件读写l写文本文件l读文本文件l写二进制文件l读二进制文件lFile类l处理压缩文件l对象序列化l随机文件读写266.2.1 写文本文件 l本节知识点 FileWriter类 创建一个磁盘文件 关闭一个磁盘文件 write() 方法 捕获I/O异常 BufferedWriter 类文件读写27l在C盘根目录创建文本文件Hello.txt,并往里写入若 干行文本

15、import java.io.*; class Ex6_2 public static void main ( String args ) throws IOException /main方法中声明抛出IO异常String fileName = “C:Hello.txt“; FileWriter writer = new FileWriter( fileName ); writer.write( “Hello!n“); writer.write( “This is my first text file,n“ ); writer.write( “You can see how this is d

16、one.n“ ); writer.write(“输入一行中文也可以n“);writer.close(); 6.2.1 写文本文件(续)例6_2文件读写28l打开C盘根目录下的Hello.txt文件换行有些问题,例6_4中将解决这个问题6.2.1 写文本文件(续)例6_2运行结果文件读写296.2.1 写文本文件(续)例6_2说明l每次运行这个程序,都将删除已经存 在的”Hello.txt”文件,创建一个新的 同名文件lFileWriter的构造方法有五个,本例 是通过一个字符串指定文件名来创建lFileWriter类的write方法向文件中写 入字符30lWriter类的流可实现内部格式到外部磁盘文件格式 的转换 “Hello.txt”是一个普通

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号