Java面向对象程序的设计输入输出_第1页
Java面向对象程序的设计输入输出_第2页
Java面向对象程序的设计输入输出_第3页
Java面向对象程序的设计输入输出_第4页
Java面向对象程序的设计输入输出_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深圳职业技术学院深圳职业技术学院主讲教师:袁梅冷主讲教师:袁梅冷 2021-05-15电信学院电信学院-软件工程系软件工程系本单元教学内容 输入输出流基本概念输入输出流基本概念 输入输出节点流输入输出节点流 输入输出过滤流输入输出过滤流 文件的随机读写文件的随机读写 文件与目录管理文件与目录管理流的概念 大多数应用程序都需要与外部设备进行数据交大多数应用程序都需要与外部设备进行数据交换,最常见的外部设备包含磁盘,网络,键盘换,最常见的外部设备包含磁盘,网络,键盘和显示器等。和显示器等。IO就是指应用程序对这些设备的就是指应用程序对这些设备的数据输入和输出数据输入和输出 在在Java中,我们将这

2、些输入输出的数据都看作中,我们将这些输入输出的数据都看作数据流。即一串连续不断的数据的集合,就像数据流。即一串连续不断的数据的集合,就像水管里的水流。水管里的水流。 这样做有什么好处?这样做有什么好处? 屏蔽了数据源与数据宿的多样性与复杂性,给屏蔽了数据源与数据宿的多样性与复杂性,给程序提供了一个统一的操作界面和操作流程。程序提供了一个统一的操作界面和操作流程。输入输出流的基本概念输入流:读取数据时与数据源之间建立的数据通道;输出流:输出数据时与数据宿(数据槽)之间建立的数据通道。输出流输出流输入流输入流如果我们要将文件如果我们要将文件A的内容写入文件的内容写入文件B,那么要读取文件那么要读取

3、文件A的内容和写入文件的内容和写入文件B时,我们分别需要建立什么流?时,我们分别需要建立什么流?流的分类 按功能划分:按功能划分: 输入流输入流 输出流输出流 按流中的数据类型划分:按流中的数据类型划分: 字节流:以字节为传输单位字节流:以字节为传输单位 字符流:以字符为传输单位,特别用于文本数字符流:以字符为传输单位,特别用于文本数据据 按建立方式和工作原理划分:按建立方式和工作原理划分: 节点流:程序与输入源或输出宿之间直接建立节点流:程序与输入源或输出宿之间直接建立的流的流 过滤流:以某一个节点流作为流的来源,并对过滤流:以某一个节点流作为流的来源,并对其进行一些加工处理的流。能有效改善

4、输入其进行一些加工处理的流。能有效改善输入/输输出操作出操作基本流类 字节流字节流 输入字节流:输入字节流:InputStream 输出字节流:输出字节流:OutputStream 字符流字符流 输入字符流:输入字符流:Reader 输出字符流:输出字符流:Writer 以上四个基本流类都是抽象类,只是为具体其以上四个基本流类都是抽象类,只是为具体其子类规定要实现的方法。子类规定要实现的方法。 由其具体子类负责创建与各种数据源或数据宿由其具体子类负责创建与各种数据源或数据宿的数据流。的数据流。InputStream相关方法 3个读取数据的方法个读取数据的方法 int read() /将所读字节

5、以整数类型返回,当没有字节将所读字节以整数类型返回,当没有字节时返回时返回1 int read(byte buffer) /返回的所读字节数,无时返返回的所读字节数,无时返回回1 int read(byte buffer,int offset,int length) 其它方法其它方法 void close()OutputStream相关的方法 3个写数据的方法个写数据的方法 void write(int c) void write(byte buffer) void write(byte buffer int offset,int length) 其它方法其它方法 void close() v

6、oid flush()举例 使用字节流进行文件的拷贝例使用字节流进行文件的拷贝例5_75_7 1 1。分析。分析 要实现文件拷贝,必须有两个文件,一个要实现文件拷贝,必须有两个文件,一个为源文件,另一个为目标文件为源文件,另一个为目标文件 要从源文件中读取数据,我们需要创建一要从源文件中读取数据,我们需要创建一个输入流个输入流 要向目标文件写入数据,我们需要创建一要向目标文件写入数据,我们需要创建一个输出流个输出流 2 2。字节文件流:用来构建与文件间的字。字节文件流:用来构建与文件间的字节流节流 文件输入流:文件输入流:FileInputStreamFileInputStream 文件输出流

7、:文件输出流:FileOutputStreamFileOutputStream 如:如:FileOutputStream file=new FileOutputStream file=new FileOutputStream(“myFile.txt”); FileOutputStream(“myFile.txt”); 小结 使用流进行输入使用流进行输入/输出操作的基本步骤:输出操作的基本步骤: 导入相应的流类导入相应的流类 ,如,如import java.io.*; 创建相应的流对象创建相应的流对象 使用流对象进行数据的输入使用流对象进行数据的输入/输出操作处理输出操作处理 关闭流对象关闭流对

8、象 FileInputStream是是InputStream类的子类,是类的子类,是一种字节输入流,注意他的命名方式一种字节输入流,注意他的命名方式 FileOutputStream是是OutputStream类的子类,类的子类,是一种字节输出流,注意他的命名方式是一种字节输出流,注意他的命名方式字符节点流 Java中的字符是中的字符是Unicode编码,是双字节,而编码,是双字节,而InputStream和和OutputStream是用来处理单字是用来处理单字节的,在处理字符文本时不太方便,节的,在处理字符文本时不太方便,Java就为就为字符文本的输入输出专门提供了一套单独的类。字符文本的输

9、入输出专门提供了一套单独的类。 Reader、Writer与与InputStream、OutputStream相对应,也是两个抽象类相对应,也是两个抽象类Reader的相关方法 3个读数据方法个读数据方法 int read() int read(char cbuf) int read(char cbuf,int offset,int length) 其它方法其它方法 void close()Writer的相关常用方法 5个读方法个读方法 void write(int c) void write(char cbuf) void write(char cbuf,int offset,int len

10、gth) void write(String string) void write(String string,int offset,int length) 其它方法其它方法 void close()举例 使用字符流实现文本文件内容显示例使用字符流实现文本文件内容显示例5_85_8 1 1。分析。分析 程序要求将文本文件的内容显示到屏幕程序要求将文本文件的内容显示到屏幕上上 要从文本文件中读取数据,我们需要创要从文本文件中读取数据,我们需要创建一个字符文件输入流建一个字符文件输入流 要向屏幕输出数据,我们需要有一个输要向屏幕输出数据,我们需要有一个输出流出流System.outSystem.o

11、ut) 2 2。字符文件流:用来构建与文件间的字。字符文件流:用来构建与文件间的字符流符流 文件输入流:文件输入流:FileReaderFileReader 文件输出流:文件输出流:FileWriterFileWriter 如:如:FileReader file=new FileReader file=new FileReader(“myFile.txt”); FileReader(“myFile.txt”); 小结 操作的基本步骤:操作的基本步骤: 导入相应的流类导入相应的流类 ,如,如import java.io.*; 创建相应的流对象创建相应的流对象 使用流对象进行数据的输入使用流对象进

12、行数据的输入/输出操作处理输出操作处理 关闭流对象关闭流对象 FileReader是是Reader类的子类,是一种字符输类的子类,是一种字符输入流,注意他的命名方式入流,注意他的命名方式 FileWriter是是Writer类的子类,是一种字符输出类的子类,是一种字符输出流,注意他的命名方式流,注意他的命名方式试一试 使用字符流实现文本文件的拷贝,并同使用字符流实现文本文件的拷贝,并同时将文本文件内容显示在屏幕上,并统计文本时将文本文件内容显示在屏幕上,并统计文本文件的字符数,源文件与目标文件名均以命令文件的字符数,源文件与目标文件名均以命令行参数形式提供。行参数形式提供。过滤流 上次课,我们

13、接触到许多节点流类,他们可以上次课,我们接触到许多节点流类,他们可以以字节或字符为传输单位来传输数据以字节或字符为传输单位来传输数据 FileOutputStream向文件中写入字节向文件中写入字节 FileWriter向文件中写入字符向文件中写入字符 那么,如果我们要向文件中写入那么,如果我们要向文件中写入double类型的类型的数据,改怎么做呢?数据,改怎么做呢? 先将先将double类型的数据转换为字节数组,再将类型的数据转换为字节数组,再将字节数组写入到文件中字节数组写入到文件中 那么有没有简便的方法呢?那么有没有简便的方法呢?如何向文件中写入基本数据类型例59)import java

14、.io.*;class DataOutpublic static void main(String args) throws IOExceptionFileOutputStream fout=new FileOutputStream(data.txt);DataOutputStream out=new DataOutputStream(fout);String items=面包面包,笔笔,被子被子,牙膏牙膏,毛巾毛巾;int units=5,2,1,2,3;float prices=1.5f,2.8f,125f,7.2f,5.6f;for(int i=0;iitems.length;i+)ou

15、t.writeUTF(itemsi);out.writeChar(t);out.writeFloat(pricesi);out.writeChar(t);out.writeInt(unitsi);out.writeChar(t);out.close();使用DataInputStream从文件中读入基本类型数据看程序例看程序例5-10过滤流的概念和特点 DataOutputStream实际上是一个中间类,在实际上是一个中间类,在它内部,将其他数据类型转换成字节数组,然它内部,将其他数据类型转换成字节数组,然后调用底层的节点流类将这个字节数组写入目后调用底层的节点流类将这个字节数组写入目标设备。

16、我们将这种中间类称为过滤流类标设备。我们将这种中间类称为过滤流类程序程序方法方法C方法方法B方法方法A方法方法1目标设备目标设备包装流类包装流类节点流类节点流类过滤流的特点 以节点流为基础以节点流为基础 当创建一个过滤流对象时,必须指定它要调用当创建一个过滤流对象时,必须指定它要调用的那个的底层对象。如:的那个的底层对象。如:DataOutputStream的构造器方法:的构造器方法:public DataOutputStreamOutputStream out) 提供了一些附加功能提供了一些附加功能 如如BufferedOutputStream也是基于也是基于OutputStream类的过滤

17、流类,它提供了输出缓类的过滤流类,它提供了输出缓冲功能冲功能 既然既然BufferedOutputStream是是OutputStream的子类,那么,的子类,那么,DataOutputStream的构造器的构造器方法中是否可以传入方法中是否可以传入BufferedOutputStream类型的对象作为参数呢?类型的对象作为参数呢?实战演习1编程从键盘输入若干名学生的课程成绩信息编程从键盘输入若干名学生的课程成绩信息学号、姓名与课程成绩),并将该信息保存学号、姓名与课程成绩),并将该信息保存在文件在文件studentscore.dat中。中。2编程从上题中的编程从上题中的studentscor

18、e.dat文件中读出文件中读出学生课程成绩信息并在屏幕上显示出来,并计学生课程成绩信息并在屏幕上显示出来,并计算学生的平均成绩、统计不及格人数。算学生的平均成绩、统计不及格人数。构造带缓冲的文件数据输入/输出流字符过滤流 DataOutputStream以以OutputStream字节节点字节节点流为基础,因此属于字节过滤流流为基础,因此属于字节过滤流 那么以字符节点流那么以字符节点流Reader、Writer为基础的过为基础的过滤流,则称为字符过滤流滤流,则称为字符过滤流 我们前面用到的我们前面用到的BufferedReader就是就是 它提供了输出缓冲功能它提供了输出缓冲功能,还增加了对整

19、行字符的还增加了对整行字符的处理方法处理方法readLine() 调试运行例调试运行例511) 使用使用BufferedReader和和BufferedWriter实现文实现文本文件的按行拷贝本文件的按行拷贝字符过滤流InputStreamReader和OutputStreamWriter类 InputStreamReader类和类和OutputStreamWriter类是两个较为特殊的流类,主要用来将字节流类是两个较为特殊的流类,主要用来将字节流转换为字符流,通常将其视为在字节流和字符转换为字符流,通常将其视为在字节流和字符流中搭建的一座流中搭建的一座“桥桥”。看程序例看程序例5-12Pri

20、ntWriter类DataOutputStream提供了将提供了将Java各种类型数据输出的各种类型数据输出的方法,但是将各种数据以二进制形式输出的,我们无法方法,但是将各种数据以二进制形式输出的,我们无法进行方便的查看。而我们使用进行方便的查看。而我们使用PrintWrtier类的类的print()方方法和法和println()方法可以轻松的实现将方法可以轻松的实现将Java的各种类型数的各种类型数据转换为字符串类型输出。据转换为字符串类型输出。PrintWriter流与其它的过滤流的不同在于可以基于字节流与其它的过滤流的不同在于可以基于字节流和字符流两种类型的流来创建。如可以通过下面两种流和字符流两种类型的流来创建。如可以通过下面两种方式为文件方式为文件text.txt创建创建PrintWriter对象:对象:PrintWriter pw=new PrintWriter(new FileWrite

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论