JAVA_7输入输出_第1页
JAVA_7输入输出_第2页
JAVA_7输入输出_第3页
JAVA_7输入输出_第4页
JAVA_7输入输出_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、0Java的基本输入与输出1Java的基本输入与输出方式l字符界面方式(本章内容)字符界面方式(本章内容)l图形界面方式(以后介绍)图形界面方式(以后介绍)2一、一、JavaJava中流的概念中流的概念u日常生活中的流可以被理解为一根日常生活中的流可以被理解为一根“导管导管”。u导管的特点:单向性。导管的特点:单向性。日常生活中所说的流:日常生活中所说的流: 1、什么是流什么是流?u“导管导管”中的流类似于中的流类似于JavaJava语言中的语言中的IOIO流。流。uJavaJava语言中,流是程序在输入输出过程中语言中,流是程序在输入输出过程中流动的数据序列。流动的数据序列。u流有两个端口:

2、一端与数据源点(当输入数据时)或数据流有两个端口:一端与数据源点(当输入数据时)或数据终点(当输出数据时)相连,另一端与程序相连。终点(当输出数据时)相连,另一端与程序相连。32、流的示意图、流的示意图l当程序要把结果输送到数据终点时,必须在程序和数据终当程序要把结果输送到数据终点时,必须在程序和数据终点之间连接建立输出流点之间连接建立输出流。 数据源数据源ProgramProgramn当程序要从数据源点获得数据时,必须在程序和数据源之当程序要从数据源点获得数据时,必须在程序和数据源之间建立间建立输入流。输入流。43、流的分类、流的分类l根据流中数据传输的方向,将流分为:根据流中数据传输的方向

3、,将流分为:输入流输入流: :从键盘或磁盘文件流向程序的数据流,为程序提从键盘或磁盘文件流向程序的数据流,为程序提供输入信息。供输入信息。输出流输出流: :从程序流向显示器、打印机、磁盘文件的数据流,从程序流向显示器、打印机、磁盘文件的数据流,实现程序的输出功能。实现程序的输出功能。l根据流中的数据格式,将流分为:根据流中的数据格式,将流分为:字符流:以字符为传输单位;字符流:以字符为传输单位;字节流:以字节为传输单位;字节流:以字节为传输单位;5两种结构的流uu Node Stream(节点流) :从特定源地方读写的流类,如磁盘文件或内存某如磁盘文件或内存某区域进行读或写入。区域进行读或写入

4、。uFilter Steam(过滤流):使用已经存在的输入流或输出流连接创建:使用已经存在的输入流或输出流连接创建。使用节点流作为输入或输出。u节点流类:用于直接操作目标设备所对应的流类; 过滤流通常代表拥有某种功能, 但也要通过节点流实现其功能6二、二、JavaJava中提供的中提供的IOIO流流l为了便于流的处理,为了便于流的处理,JavaJava在在Java.ioJava.io包中提供了丰富的类,包中提供了丰富的类,每个类代表了一种特定的输入或输出流。每个类代表了一种特定的输入或输出流。l利用输入流类可以建立输入流对象,利用输入数据流类提供利用输入流类可以建立输入流对象,利用输入数据流类

5、提供的方法可以从输入设备将数据读入到程序中;的方法可以从输入设备将数据读入到程序中;l利用输出流类可以建立输出流对象,利用输出数据流类提供利用输出流类可以建立输出流对象,利用输出数据流类提供的方法可以将程序产生的数据写到输出设备上;的方法可以将程序产生的数据写到输出设备上;7 1 1、JavaJava中流类的总图如下:中流类的总图如下:用于输入的字节用于输入的字节流流用于输出的字节用于输出的字节流流用于输入的字符用于输入的字符流类流类用于输出的字符用于输出的字符流类流类82 2、字节流类、字节流类l字节流以字节方式从流中读取或向流中写入数据,字节流类字节流以字节方式从流中读取或向流中写入数据,

6、字节流类有:有:输入流类输入流类InputStreamInputStream及其子类及其子类输出流类输出流类OutputStreamOutputStream及其子类及其子类lInputStreamInputStream和和OutputStreamOutputStream分别是所有字节输入分别是所有字节输入类和字节输出类流的祖先。类和字节输出类流的祖先。lInputStreamInputStream和和OutputStreamOutputStream为为抽象类抽象类,不能用来直接,不能用来直接创建流,创建流,只能用它们的子类创建字节输入或字节输出流只能用它们的子类创建字节输入或字节输出流。9字节

7、流类的继承图:字节流类的继承图:10InputStream字节流的字节流的方法方法 uu三个基本三个基本read()方法方法int read() int read(byte ) int read( byte, int offset, int length )uu其它方法其它方法void close( ) /int available() /long skip(long n) / void mark(int) /void reset( ) / 11OutputStream字节流方法字节流方法uu三个基本的三个基本的write( )方法方法void write( int ) / 写一个字节写一个字

8、节void write(byte ) / 写一个字节数组写一个字节数组void write(byte , int offset, int length ) uu其它方法其它方法void flush( ) void close( ) 12基本的字节流类FileInputStream和和FileOutputStream 节点流,用于从文件中读取或往文件中写入字节流。节点流,用于从文件中读取或往文件中写入字节流。BufferedInputStream和和BufferedOutputStream 过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效过滤流,需要使用已经存在的节点流来

9、构造,提供带缓冲的读写,提高了读写的效率。率。DataInputStream和和DataOutputStream 过滤流,需要使用已经存在的节点流来构造,提供了读写过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型中的基本数据类型的功能。的功能。PipedInputStream和和PipedOutputStream 管道流,用于线程间的通信。一个线程的管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流对象读取输入。要使管道流有用,必

10、须同时构造管道输入流和管道输出流。和管道输出流。13FileInputStream,FileOutputStream文件流文件流uu文件流类包括:文件流类包括:FileInputStream,FileOutputStreamuu创建文件流:常用文件名或创建文件流:常用文件名或File类的对象创建文件流。类的对象创建文件流。14uu是过滤流。是过滤流。 数据从原始流成块读入或将数据积累到一个大数据块后数据从原始流成块读入或将数据积累到一个大数据块后再成批输出。再成批输出。uu基本方法:基本方法:int read()int read( byte, int offset, int length )i

11、nt write(int c)void write(byte , int offset, int length )void flush( ) void close( ) uuBufferedReader增加增加readLine( ) 方法。方法。BufferedInputStream/BufferedOutputStream15uu DataInputStream和和DataOutputStream(Filter stream)读写基本数据类型:读写基本数据类型:DataInputStream方法方法 byte readByte( )boolean readBoolean( ) long re

12、adLong( )char readChar( ) double readDouble( )float readFloat( ) short readshort( )int readInt( )DataOutputStream 方法方法 void writeByte(byte)void writeBoolean(boolean) void writeLong( long )void writeChar(char) void writeDouble(double)void writeFloat( float) void writeshort(short)void writeInt ( int)

13、void writeBytes(String)void writeChars(String )DataInputStream/DataOutputStream16limport java.io.*;lpublic class test l public static void main(String args) throws IOException l / write the data outl DataOutputStream out = new DataOutputStream(newl FileOutputStream(invoice1.txt);l double prices = 19

14、.99, 9.99, 15.99, 3.99, 4.99 ;l int units = 12, 8, 13, 29, 50 ;l String descs = Java T-shirt,l Java Mug,l Duke Juggling Dolls,l Java Pin,l Java Key Chain ;l for (int i = 0; i prices.length; i +) l out.writeDouble(pricesi);l out.writeChar(t);l out.writeInt(unitsi);l out.writeChar(t);l out.writeChars(

15、descsi);l out.writeChar(n);l l out.close();17l/ read it in againl DataInputStream in = new DataInputStream(newl FileInputStream(invoice1.txt);l double price;l int unit;l String desc; l try l while (true) l price = in.readDouble();l in.readChar(); / throws out the tabl unit = in.readInt();l in.readCh

16、ar(); / throws out the tabl desc = in.readLine();l System.out.println( price:+price + unit:+l unit + desc:+ desc); l l catch (EOFException e) l l in.close();l l 字节写入文本看不到这些原来的数字,只有通过DataInputStream读出来 18三、标准输入三、标准输入/ /输出输出标准输入标准输入/ /输出输出; ;指面向标准输入设备和标准输出设备指面向标准输入设备和标准输出设备的输入的输入/ /输出。输出。标准输入设备:现阶段默认为

17、键盘。标准输入设备:现阶段默认为键盘。标准输出设备:现阶段默认为显示器。标准输出设备:现阶段默认为显示器。191、SystemSystem类类 SystemSystem类是类是JavaJava语言中一个功能强大、非常有语言中一个功能强大、非常有用的类,它提供了标准输入与输出、运行时的系用的类,它提供了标准输入与输出、运行时的系统信息等重要工具,是属于统信息等重要工具,是属于java.langjava.lang包的一个终包的一个终止类。止类。 SystemSystem类不能创建对象,即类不能创建对象,即SystemSystem类的属性和类的属性和方法都是静态的,引用时要以方法都是静态的,引用时要

18、以SystemSystem为前缀。为前缀。 inin、outout、errerr为为SystemSystem类的三个静态属性。类的三个静态属性。20Java系统内预定义的标准系统内预定义的标准IO流定义格式流定义格式public final class java.lang.System extends java.lang.object public static InputStream in; public static PrintStream out; public static PrintStream err; 21 System.in:标准输入流,默认指键盘,用于程:标准输入流,默认指键

19、盘,用于程序输入,通常读取用户从键盘输入的信息。序输入,通常读取用户从键盘输入的信息。 System.out:标准输出流,默认指屏幕,用于标准输出流,默认指屏幕,用于程序输出,通常向用户显示信息。程序输出,通常向用户显示信息。 System.err:标准错误流,默认指屏幕,用于标准错误流,默认指屏幕,用于向用户显示出错信息。向用户显示出错信息。JavaJava系统预先定义的标准系统预先定义的标准IOIO流流222 2 标准输出流标准输出流 标准输出流使用标准输出流使用System类的静态属性类的静态属性out的的print()和和println()方法提供向屏幕输出不同类型数据的功能。实现格方

20、法提供向屏幕输出不同类型数据的功能。实现格式如下:式如下: System.out.print() System.out.println() 注意:注意:out为为OutputStream类的子类类的子类FilterOutputStream的子类的子类PrintStream创建的创建的对象,而对象,而print()和和println()方方法为法为PrintStream类的成员方法。类的成员方法。233 标准输入流标准输入流 标准输入流使用标准输入流使用System类的静态属性类的静态属性in的的read()方法方法从键盘读取一个字节到程序。实现格式如下:从键盘读取一个字节到程序。实现格式如下:

21、 System.in.read() 功能:执行该方法时,等待用户击键,当击一次键后,功能:执行该方法时,等待用户击键,当击一次键后,该方法从输入流中读出一个字节(所键入字符的该方法从输入流中读出一个字节(所键入字符的ASCII码),然后将该字符的码),然后将该字符的ASCII码换成码换成Unicode编码,返回编码,返回值为值为Unicode编码的编码的int型数。按回车输入结束。型数。按回车输入结束。Unicode码扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上

22、所有的书写语言中的字元、象形文字和其他符号。 24说明:说明:in是是System类的一个属性,代表系统标准输入(键盘)。类的一个属性,代表系统标准输入(键盘)。In属性是属性是InputStream类的对象,类的对象, InputStream类中的方类中的方法法read()用于接受从标准输入设备输入的字符。执行用于接受从标准输入设备输入的字符。执行System.in.read()会得到输入字符的会得到输入字符的unicode编码值。编码值。在在java中,当进行键盘输入时要处理可能发生的异常现象,中,当进行键盘输入时要处理可能发生的异常现象,因此程序设计时使用的因此程序设计时使用的Syste

23、m.in.read()语句必须包含在语句必须包含在try语句块中,而且语句块中,而且try语句块的后面应该有一个可以接收语句块的后面应该有一个可以接收IOException异常的异常的catch语句块。语句块。25Java I/O库的设计原则库的设计原则 Java的I/O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。 通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。 我们要获取一个I/O对象,往往需要产生多个I/O对象,这也是Java I/O库不

24、太容易掌握的原因,但在I/O库中Decorator模式的运用,给我们提供了实现上的灵活性。26I/O流的链接流的链接FileInputStreamBufferedInputStreamDataInputStream数据数据DataOutputStreamBufferedOutputStreamFileOutputStream数据数据从文件中获取输入字节从文件中获取输入字节增加了缓冲的功能增加了缓冲的功能增加了读取增加了读取Java基本基本数据类型的功能数据类型的功能Input Stream ChainOutput Stream Chain可以往输出流中写入可以往输出流中写入Java基本数据类型

25、基本数据类型提供数据写入到缓冲区提供数据写入到缓冲区的功能的功能将数据写入到文件中将数据写入到文件中27管道流管道流uu管道用来把一个线程的输出连接到另一个线程的输入。管道用来把一个线程的输出连接到另一个线程的输入。uu PipedReader/PipedInputStream实现管道的输入端;实现管道的输入端;uu PipedWriter/PipedOutputStream实现管道的输出端。实现管道的输出端。uu管道流模型:管道流模型:管道输入管道输出管道输入线程1连接线程2线程3连接管道输出28将一个线程的输出流直接挂在另一个线程的输入流,将一个线程的输出流直接挂在另一个线程的输入流,建立

26、管道建立管道connect方法,实现线程间数据交换。方法,实现线程间数据交换。uuPipedInputStream pin= new PipedInputStream( );PipedOutputStream pout = new PipedOutputStream(pin);uuPipedInputStream pin= new PipedInputStream( );PipedOutputStream pout = new PipedOutputStream();pin.connect(pout);或或pout.connect(pin)。管道流的创建管道流的创建29字符流类字符流类 使用字

27、节流输入字符串较复杂,使用字符流处使用字节流输入字符串较复杂,使用字符流处理字符串的输入,相对于字节流来讲,较为方便。理字符串的输入,相对于字节流来讲,较为方便。 JavaJava字符流类主要用来读写字符流类主要用来读写UnicodeUnicode字符。字符字符。字符流处理的单元为流处理的单元为2 2个字节个字节的的UnicodeUnicode字符字符 字符流类层次的顶层是字符流类层次的顶层是ReaderReader类类和和WriterWriter类类。 30ReaderBufferedReaderCharArrayReaderFilterReaderPipedReaderStringRead

28、erFileReader LineNumberReaderPushbackReader InputStreamReader31WriterBufferedWriterCharArrayWriterFilterWriterPipedWriterPrintWriterFileWriter OutputStreamWriterStringWriter32主要字符流类及其子类主要字符流类及其子类 Reader Reader类:类: 用来以字符方式从流中读取数据。其中包含了用来以字符方式从流中读取数据。其中包含了一套所有字符输入流都需要的方法,可以完成最基一套所有字符输入流都需要的方法,可以完成最基本的

29、从字符输入流读取数据的功能。本的从字符输入流读取数据的功能。ReaderReader类也是类也是一个抽象类一个抽象类,实际应用中创建的对象是,实际应用中创建的对象是ReaderReader类的类的某个子类的对象,通过对象与外设数据源相连。某个子类的对象,通过对象与外设数据源相连。33WriterWriter类:类: 用来以字符方式向输出流中写入数据。其中包用来以字符方式向输出流中写入数据。其中包含了一套所有字符输出流都需要的方法,可以完含了一套所有字符输出流都需要的方法,可以完成最基本的向字符输出流写入数据的功能。成最基本的向字符输出流写入数据的功能。 WriterWriter类也是一个类也是

30、一个抽象类抽象类,实际应用中创建的对,实际应用中创建的对象是象是WriterWriter类的某个子类的对象,通过对象与外类的某个子类的对象,通过对象与外设数据源相连。设数据源相连。34Reader类和Writer类的常用子类: Reader类:类: BufferedReader类类:把字符流中的字符读入指定的缓冲区。:把字符流中的字符读入指定的缓冲区。 CharArrayReader类:允许使用字符数组作为数据流。类:允许使用字符数组作为数据流。 FilterReader类:允许读取过滤的的字符数据流。类:允许读取过滤的的字符数据流。 InputStreamReader类类:读取字节数据并将其

31、转化为字符。:读取字节数据并将其转化为字符。 Writer类类 : BufferedWriter类:将数据缓冲区的字符写到输出流类:将数据缓冲区的字符写到输出流 CharArrayWriter类:将字符数组缓冲区的字符写到输出流。类:将字符数组缓冲区的字符写到输出流。 FilterWriter类:将过滤的字符写到输出流。类:将过滤的字符写到输出流。 OutputStreamWriter类:将字符转化为字节写到输出流。类:将字符转化为字节写到输出流。35BufferedReader类: 该类可以对任何种类的输入流进行带缓冲区的封装以实现性能的改善。该该类可以对任何种类的输入流进行带缓冲区的封装以

32、实现性能的改善。该类的构造函数以类的构造函数以ReaderReader所有子类对象为参数,将从数据源读取的多个数据可所有子类对象为参数,将从数据源读取的多个数据可以先暂存放到缓冲区中,即将以先暂存放到缓冲区中,即将Unicode字符流包装(转换)成缓冲流,使输字符流包装(转换)成缓冲流,使输入速度更快。例如:入速度更快。例如: BufferedReader bufin=new BufferedReader(new InputStreamReader(System.in) 该语句相当于用该语句相当于用BufferedReader 类创建了一个缓冲过滤流对象类创建了一个缓冲过滤流对象bufin。

33、BufferedReader类的类的readline()方法每次从输入流中读取一行数据,返方法每次从输入流中读取一行数据,返回一个字符串。例如:回一个字符串。例如: String sname=bufin.readline(); 该语句相当于从缓冲过滤流对象该语句相当于从缓冲过滤流对象bufin中读取成批的数据,然后赋值给字符中读取成批的数据,然后赋值给字符串变量串变量sname。而不是从数据源中一个一个读取数据。而不是从数据源中一个一个读取数据。 36InputStreamReader类 该类是从字节流到字符流的桥梁。该类的构造函数以该类是从字节流到字符流的桥梁。该类的构造函数以InputSt

34、ream类(字节类)对象为参数,将字节流包装类(字节类)对象为参数,将字节流包装(转换)成(转换)成Unicode字符流。例如:字符流。例如: InputStreamReader stdin=new InputStreamReader(System.in) 该语句相当于用该语句相当于用InputStreamReader类创建了一个将字节流转类创建了一个将字节流转换成换成Unicode字符流的对象字符流的对象stdin。 System.in是是System类的属性,代表类的属性,代表标准输入流,标准输入流,in又是又是InputStream类的对象,代表字节流。类的对象,代表字节流。 也就是说,将标准输入字节流转换成字符流。也就是说,将标准输入字节流转换成字符流。 37 为了提高读取效率,通常将为了提高读取效率,通常将InputStream

温馨提示

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

评论

0/150

提交评论