Java语言程序设计:第6章 输入、输出流和文件

上传人:经*** 文档编号:295541002 上传时间:2022-05-20 格式:PPT 页数:119 大小:1.25MB
返回 下载 相关 举报
Java语言程序设计:第6章 输入、输出流和文件_第1页
第1页 / 共119页
Java语言程序设计:第6章 输入、输出流和文件_第2页
第2页 / 共119页
Java语言程序设计:第6章 输入、输出流和文件_第3页
第3页 / 共119页
Java语言程序设计:第6章 输入、输出流和文件_第4页
第4页 / 共119页
Java语言程序设计:第6章 输入、输出流和文件_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《Java语言程序设计:第6章 输入、输出流和文件》由会员分享,可在线阅读,更多相关《Java语言程序设计:第6章 输入、输出流和文件(119页珍藏版)》请在金锄头文库上搜索。

1、第六章第六章 输入输入/输出流和文件输出流和文件JAVA语言程序设计目录目录l6.1 输入输入/输出流输出流l6.2 文件读写文件读写l6.3 本章小结本章小结26.1.1 I/O流的概念流的概念 lI/O流流(Input/Output)在Java中将信息的输入与输出过程抽象为I/O流l输入是指数据流入程序l输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就会自动打开通过调用close方法,可以显式关闭任何一个流,如果流对象不再被引用,Java的垃圾回收机制也会隐式地关闭它输入/输出流4l输入流输入流为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息

2、l输出流输出流当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个目标位置写信息6.1.1 I/O流的概念流的概念(续续) 输入/输出流5对象对象源源?目标目标?或两者或两者?diskfilerunningprogrammonitorkeyboardInternetconnectionimagescannermouseBothBothDestinationSourceBothSourceSource输入/输出流6.1.1 I/O流的概念流的概念(续续)源和目标的类型源和目标的类型6l不论数据从哪来,到哪去,也不论数据本不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据

3、的方法大体上都是身是何类型,读写数据的方法大体上都是一样的:一样的: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 Formatl包括ASCII 码及

5、非ASCII 码字符,比如: 斯拉夫(Cyrillic)字符, 希腊字符,亚洲字符等6.1.2 预定义的预定义的I/O流类概述流类概述(续续) 面向字符的流面向字符的流输入/输出流11l面向字符的抽象类面向字符的抽象类Reader和和Writerjava.io包中所有字符流的抽象基类Reader提供了输入字符的APIWriter提供了输出字符的API它们的子类又可分为两大类l节点流:从数据源读入数据或往目的地写出数据l处理流:对数据执行某种处理多数程序使用这两个抽象类的一系列子类来读入/写出文本信息l例如FileReader/FileWriter用来读/写文本文件6.1.2 预定义的预定义的I

6、/O流类概述流类概述(续续) 面向字符的流面向字符的流输入/输出流126.1.2 预定义的预定义的I/O流类概述流类概述(续续) 面向字符的流面向字符的流输入/输出流阴影部分为节点流13l数据源或目标中含有非字符数据,必数据源或目标中含有非字符数据,必须用字节流来输入须用字节流来输入/输出输出l通常被用来读写诸如图片、声音之类通常被用来读写诸如图片、声音之类的二进制数据的二进制数据l绝大多数数据是被存储为二进制文件绝大多数数据是被存储为二进制文件的,世界上的文本文件大约只能占到的,世界上的文本文件大约只能占到2,通常二进制文件要比含有相同,通常二进制文件要比含有相同数据量的文本文件小得多数据量

7、的文本文件小得多6.1.2 预定义的预定义的I/O流类概述流类概述(续续) 面向字节的流面向字节的流输入/输出流14lInputStream和和OutputStream是用来处理8位字节流的抽象基类,程序使用这两个类的子类来读写8位的字节信息分为两部分l节点流l处理流6.1.2 预定义的预定义的I/O流类概述流类概述(续续) 面向字节的流面向字节的流输入/输出流156.1.2 预定义的预定义的I/O流类概述流类概述(续续) 面向字节的流面向字节的流输入/输出流阴影部分为节点流16l标准输入输出流对象标准输入输出流对象System类的静态成员变量包括lSystem.in: InputStream

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

9、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.

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

11、续) 例例6_1说明说明输入/输出流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: 把文本转化成基本类把文本转化成基本类型或者型或者StringScanner s = new Scanner(System.in);int n = s.nextInt();还有下列方法:next.Byte(),nextDouble(),next

12、Float,nextInt(),nextLine(),nextLong(),nextShort()21l重导向标准输入重导向标准输入System.in和标准输出和标准输出System.outimport java.io.*;public class Redirecting public static void main(String args) throws IOException BufferedInputStream in = new BufferedInputStream( new FileInputStream( Redirecting.java); PrintStream out =

13、 new PrintStream( new BufferedOutputStream( new FileOutputStream(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 th

14、is! 6.1.2 预定义的预定义的I/O流类概述流类概述(续续) Redirecting.java输入/输出流22l处理流处理流不直接与数据源或目标相连,而是基于另一个流来构造从流读写数据的同时对数据进行处理例6-1中的InputStreamReader和BufferedReader都属于处理流lInputStreamReader读取字节并转换为字符lBufferedReader对另一个流产生的数据进行缓冲6.1.2 预定义的预定义的I/O流类概述流类概述(续续) 处理流处理流输入/输出流23用一行表达式实现:用一行表达式实现:BufferedReaderBufferedReader std

15、instdin = new = new BufferedReaderBufferedReader ( new ( new InputStreamReaderInputStreamReader( (System.inSystem.in) );) ); 6.1.2 预定义的预定义的I/O流类概述流类概述(续续) 处理流处理流输入/输出流24l IO异常异常多数IO方法在遇到错误时会抛出异常,因此调用这些方法时必须l在方法头声明抛出IOException异常l或者在try块中执行IO,然后捕获IOException6.1.2 预定义的预定义的I/O流类概述流类概述(续续) I/O异常异常输入/输出流

16、256.2 文件读写文件读写l写文本文件写文本文件l读文本文件读文本文件l写二进制文件写二进制文件l读二进制文件读二进制文件lFile类类l处理压缩文件处理压缩文件l对象序列化对象序列化l随机文件读写随机文件读写266.2.1 写文本文件写文本文件 l本节知识点本节知识点FileWriter类 创建一个磁盘文件 关闭一个磁盘文件 write() 方法捕获I/O异常 BufferedWriter 类文件读写27l在在C盘根目录创建文本文件盘根目录创建文本文件Hello.txt,并往里写入若并往里写入若干行文本干行文本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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > Java

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