《Java 2面向对象程序设计基础》输入与输出ppt课件_第1页
《Java 2面向对象程序设计基础》输入与输出ppt课件_第2页
《Java 2面向对象程序设计基础》输入与输出ppt课件_第3页
《Java 2面向对象程序设计基础》输入与输出ppt课件_第4页
《Java 2面向对象程序设计基础》输入与输出ppt课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 输入与输出 时间:2次课,4学时第7章 输入与输出 教学提示:在Java开发环境中,java.io包为用户提供了几乎所有常用的数据流,因此在所有涉及数据流操作的程序中几乎都应在程序的最前面参加语句import java.io.*;,从而使用这些由环境本身提供的数据流类。 本章主要介绍:I/O流、InputStream类常用接口、OutputStream类常用接口、Reader类常用接口、Writer类常用接口 第7章 输入与输出 7.1 输入/输出包 7.2 常用的输入/输出流 7.3 对象流 7.4 过滤流 7.5 字节流与字符流的转换 7.6 课后练习 7.1 输入/输出包 7.1

2、.1 I/O流 7.1.2 InputStream类常用接口 7.1.3 OutputStream类常用接口 7.1.4 Reader类常用接口 7.1.5 Writer类常用接口 7.1 输入/输出包 如今开场介绍java.io包的内部原理。显然,这个Java包的目的是引导数据和对象的I/O操作。程序员需要使用这个Java包把数据写到磁盘文件、套接字、URL以及系统控制台上,并从中读取输入数据。还有一些可利用的格式字符串数据和处理Zip与Jar文件的工具。 本节将重点讲述java.io包中的常用输入输出类。 7.1.1 I/O流 在Java中,流分为3类,即字节流、字符流、对象流。 1. 字

3、节流 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。Java中处理字节流的类都是从InputStream和OutputStream派生出来的一系列类。7.1.1 I/O流 2. 字符流 以Unicode字符为导向的流,表示以Unicode字符为单位从stream中读取或往stream中写入信息。操作这类流的类都是从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为根本处理单位。7.1.1 I/O流 关于对象流,将在7.3节专门讲述。 除了上述三种输入输出流外,Java还提供了文件操作的类,它们是File和Ran

4、domAccessFile。 File:文件和目录途径名的抽象表示形式。 RandomAccessFile:此类的实例支持对随机存取文件的读取和写入。7.1.2 InputStream类常用接口 该类是一个抽象类,其包含的方法如下。 abstract int read:读取一个字节数据,并返回读到的数据。假如返回-1,表示读到了输入流的末尾。 int readbyte b:将数据读入一个字节数组,同时返回实际读取的字节数。假如返回-1,表示读到了输入流的末尾。 int readbyte b, int off, int len:将数据读入一个字节数组,同时返回实际读取的字节数。假如返回-1,表示

5、读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。7.1.2 InputStream类常用接口 【例7.1】下面是一个详细字节流输入的应用举例假设在磁盘上的D盘的Javacode文件夹里有test.txt文件,程序如下:Import java.io.*;class test public static void mainString args throws Exception FileInputStream fis =new FileInputStream d:Javacodetest.txt; bytebuf=new byte100; int len

6、=fis.readbuf; fis.close; System.out.printlnnew Stringbuf; 运行结果如图7-7所示。7.1.2 InputStream类常用接口 图7-7 运行结果例 OutputStream类常用接口 OutputStream类中的常用方法如下。 abstract void writeint b:往输出流中写入一个字节。 void writebyte b:往输出流中写入数组b中的所有字节。 void writebyte b, int off, int len:往输出流中写入数组b中从偏移量off开场的len个字节的数据。其中第一个方法的

7、int型的参数对应要写入的字节,后两个方法的参数与InputStream类似。 void close:关闭输出流。 void flush:强行将写入缓冲区中剩余的数据写入。7.1.3 OutputStream类常用接口 【例7.2】用OutputStream的一个派生类FileOutputStream的应用举例,程序如下。import java.io.*;class testpublic static void mainString args throws Exception FileInputStream fis = new FileInputStreamd:Javacodetest.txt

8、; bytebuf2=new byte100; FileOutputStream fos=new FileOutputStream d:Javacodetest.txt; fos.writeHello Java!.getBytes; fos.close; int len=fis.readbuf2; System.out.println以下是写入文件里面的内容; System.out.printlnnew Stringbuf2; fis.close; 7.1.3 OutputStream类常用接口 运行结果如图7-8所示。 图7-8 运行结果例 Reader类常用接口 在Read

9、er类中主要有以下几个方法。 close:关闭流。 markint:标记此流的当前位置。 markSupported:报告此流是否支持 mark 操作。 read:读取单一字符。 readchar:将字符读到一数组。 readchar, int, int:将假设干字符读入一个数组中。 ready:报告此流是否已准备读。 reset:复位流。 skiplong:跳过假设干字符。 但是,为了提供更高的效率或额外的功能或两者兼备,大部分子类只覆盖此处定义的方法中的某些方法。7.1.4 Reader类常用接口 【例7.3】利用Reader的子类BufferedReader从文件file1.txt文件中

10、读取数据。其中方法readLine是进展整行的读取。程序如下。import java.io.*;class filestream2 public static void mainString args throws Exception FileInputStream fis=new FileInputStreamfile1.txt; InputStreamReader isr=new InputStreamReaderfis; BufferedReader br=new BufferedReaderisr; String strline; whilestrline=br.readLine!=n

11、ull System.out.printlnstrline; 7.1.5 Writer类常用接口 Writer类中的方法和OutputStream类的方法类似,只不过Writer类中的方法的参数换成了字符或字符数组。它的常用方法如下。 close:先刷新然后关闭此流。 flush:刷新流。 writechar:写入一个字符数组。 writechar, int, int:部分写入一个字符数组。 writeint:写入单一字符。 writeString:写入一串。 writeString, int, int:写入一串的某部分。7.1.5 Writer类常用接口 【例7.4】利用Writer的子类B

12、ufferedWriter向文件中写入数据,再用BufferedReader从文件中读取刚写入的数据,程序如下。import java.io.*;class filestream2 public static void mainString args throws Exception FileOutputStream fos=new FileOutputStreamfile1.txt; OutputStreamWriter osw=new OutputStreamWriterfos; BufferedWriter bw=new BufferedWriterosw; FileInputStrea

13、m fis=new FileInputStreamfile1.txt; InputStreamReader isr=new InputStreamReaderfis; BufferedReader br=new BufferedReaderisr; String strline; bw.writeJava Bufferedwriter writer some thing!; bw.close; whilestrline=br.readLine!=null System.out.printlnstrline; br.close; 7.1.5 Writer类常用接口 运行结果如图7-9所示。 图7

14、-9 运行结果例7.47.2 常用的输入/输出流 7.2.1 标准输入/输出 7.2.2 操作目录和文件 7.2.3 文件流 7.2.4 随机文件的访问 7.2 常用的输入/输出流 本节介绍Java中常用的输入输出流,纯熟地掌握它们更有利于进展Java程序开发。7.2.1 标准输入/输出 System类管理标准输入输出流和错误流。 System.out:把输出送到默认的显示设备通常是显示器,System.out属于PrintStream类型。 System.in:从标准输入键盘获取输入,System.in属于BufferedInputStream类型。 System.err:把错误信息送到默认

15、的显示,System.err也是属于PrintStream类型。 每当main方法被执行时,就自动生成上述3个对象。7.2.1 标准输入/输出 【例7.5】重定向输出打印结果举例,代码如下。import java.io.File;import java.io.FileOutputStream;import java.io.PrintStream;class Test public static void mainString args File test = new Filetest.txt; PrintStream out = null; PrintStream oldout = Syste

16、m.out; try 7.2.1 标准输入/输出 out = new PrintStreamnew FileOutputStreamtest; System.setOutout; System.out.println这是在文件中输出的结果; /System.out.printlnout; /System.out.printlnSystem.out; System.setOutoldout; System.out.println这是在屏幕上输出的结果; catch Exception e System.out.printlne.getMessage; 运行结果如图7-10所示。7.2.1 标准输

17、入/输出 图7-10 运行结果例7.5 7.2.2 操作目录和文件 1. File类的构造方法 File的构造方法有3种,分别如下。 FileFile, String:创立一个File实例,表示指定途径指定名称的文件。 FileString:创立一个File实例,表示途径名是指定途径参数的文件。 FileString, String:创立一个File实例,它的途径名是指定的途径名后跟分隔符字符和 name 参数。7.2.2 操作目录和文件 2. File类的方法 File类的对象方法如下。 canRead:测试应用程序是否能从指定的文件中读取。 canWrite:测试应用程序是否能写当前文件。

18、 delete:删除当前对象指定的文件。 equalsObject:比较该对象和指定对象。 exists:测试当前File是否存在。 getAbsolutePath:返回由该对象表示的文件的绝对途径名。 getCanonicalPath:返回当前File对象的途径名的标准格式。 getName:返回表示当前对象的文件名。 getParent:返回当前File对象途径名的父途径名,假如此名没有父途径那么为null。7.2.2 操作目录和文件 getPath:返回表示当前对象的途径名。hashCode:计算此文件的一个哈希码。isAbsolute:测试当前File对象表示的文件是否是一个绝对途径名

19、。isDirectory:测试当前File对象表示的文件是否是一个途径。isFile:测试当前File对象表示的文件是否是一个“普通文件。lastModified:返回当前File对象表示的文件最后修改的时间。length:返回当前File对象表示的文件长度。list:返回当前File对象指定的途径文件列表。listFilenameFilter:返回当前File对象指定的目录中满足指定过滤器的文件列表。mkdir:创立一个目录,它的途径名由当前File对象指定。mkdirs:创立一个目录,它的途径名由当前File对象指定,包括任一必需的父途径。renameToFile:将当前File对象指定的

20、文件更名为给定参数File指定的途径名。toString:返回当前对象的字符串表示。7.2.3 文件流 可以利用File类来创立文件流,详细步骤如下。 1 文件对象的建立: File fp=new Filetempfile.txt; 2 文件流的建立: FileInputStream in=new FileInputStreamfp; /用来翻开一个输入文件 FileOutputStream out=new FileOutputStreamfp; /用来翻开一个输出文件7.2.3 文件流 【例7.10】本例介绍把file1.txt文件中的内容复制到file2.txt文件中去注意要捕获文件异常。

21、其中输入流的参数是用于输入的文件名,输出流的参数是用于输出的文件名。程序如下。import java.io.*;class filestream public static void mainString args try File inFile=new Filefile1.txt; File outFile=new Filefile2.txt; inFile.createNewFile; outFile.createNewFile; FileInputStream fis=new FileInputStreaminFile; FileOutputStream fos=new FileOutp

22、utStreamoutFile;7.2.3 文件流 int c; int i=0; bytebuf=new byte100; whilec=fis.read!=-1 fos.writec; bufi=bytec; i+; System.out.printlnnew Stringbuf; fis.close; fos.close; catchFileNotFoundException e System.out.printlnFileStreamsTest: +e; catchIOException e System.err.printlnFileStreamsTest: +e; 7.2.4 随机

23、文件的访问 对于InputStream 和OutputStream 来说,它们的实例都是顺序访问流,也就是说,只能对文件进展顺序地读/写。随机访问文件那么允许对文件内容进展随机读/写。在Java中,类RandomAccessFile 提供了随机访问文件的方法。 类RandomAccessFile 直接继承自Object 类,并实现了DataInput 和DataOutput 接口中的所有读/写数据的方法: public class RandomAccessFile extends Object implements DataInput, DataOutput7.2.4 随机文件的访问 接口Da

24、taInput中定义的方法主要包括从流中读取根本类型的数据、读取一行数据,或者读取指定长度的字节数,如:readBoolean、readInt、readLine、readFully等。 接口DataOutput中定义的方法主要是向流中写入根本类型的数据,或者写入一定长度的字节数组,如:writeChar、writeDouble、write等。下面详细介绍RandomAccessFile类中的主要方法。7.2.4 随机文件的访问 1. RandomAccessFile的构造方法 其构造方法有如下两种: RandomAccessFileString name,String mode:name是文件

25、名,mode是翻开方式,例如r表示只读,rw表示可读写。 RandomAccessFileFile file,String mode:file是文件对象。2. RandomAccessFile的指针的操作 随机读写流的文件指针指定了读写数据的位置,文件指针初始从0 开场,每读写一个字节,指针自动增加1。以下是一些常用方法。 long length:返回当前文件的长度。 long getFilePointer:用于得到当前的文件指针。 void seeklong pos:设置相对文件头的指针偏移量,在此位置进展下一次读写操作。 int skipBytesint n:使文件指针向后挪动指定的n个字

26、节。7.2.4 随机文件的访问 3. RandomAccessFile的读写方法 其读写方法有如下4个。 void writeBytesString s:将字符串s作为字节序列写入文件,并丢弃其高8位。 void writeCharsString s:将字符串s作为字符序列写入文件。 void readFullybyte b:从当前文件指针开场读取b.length个字节数据到数组b中。 void readFulybyte b,int off,int len:从当前文件指针开场读取len 个字节数据到数组b中,起始偏移量为off。7.3 对象流 所谓对象流也就是将对象的内容进展流化。可以对流化后

27、的对象进展读写操作,也可将流化后的对象传输于网络之间。对对象流进展读写操作就需要理解对象的序列化。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。7.3 对象流 【例7.14】对象序列化举例,程序如下。import java.io.*;class io public static void mainString args throws Exception test t1=new testwangpeng,22,2333; test t2=new testwangqian

28、g,23,2300; FileOutputStream fos=new FileOutputStreamtest.dat; ObjectOutputStream oos=new ObjectOutputStream fos; oos.writeObjectt1; oos.writeObjectt2; oos.close; FileInputStream fis=new FileInputStreamtest.dat; ObjectInputStream ois=new ObjectInputStream fis; test t3,t4; t3=testois.readObject; t4=te

29、stois.readObject; System.out.println以下是反序列化的运行结果; S; S; ois.close;7.3 对象流 class test implements Serializable String name; int age; double gongzi; public testString name,int age,double gongzi =name; this.age=age; this.gongzi=gongzi; 运行结果如图7-16所

30、示。7.3 对象流 图7-16 运行结果例7.147.4 过滤流 过滤流在读/写数据的同时可以对数据进展处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进展操作所带来的意想不到的结果。类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。 为了使用一个过滤流,必须首先把过滤流连接到某个输入/输出流上,通常通过在构造方法的参数中指定所要连接的输入/输出流来实现,例如: FilterInputStreamInputStream in FilterOutputStreamOutputStr

31、eam out7.4 过滤流 几种常见的过滤流。 1. BufferedInputStream类 对I/O 进展缓冲是一种常见的性能优化方法。Java 的BufferedInputStream 类可以对任何的InputStream 流进展带缓冲的封装以到达性能的改善。该类在已定义输入流上再定义一个具有缓冲的输入流,可以从此流中成批地读取字符,而不会每次都引起直接对数据源的读操作。数据输入时,首先被放入缓冲区,随后的读操作就是对缓冲区中的内容进展访问。该类有以下两个构造方法: public BufferedInputStreamInputStream in public BufferedInpu

32、tStreamInputStream in, int size7.4 过滤流 2. BufferedOutputStream类 BufferedOutputStream 类在已定义节点输出流上再定义一个具有缓冲功能的输出流。用户可以向流中写字符,而不会每次都引起直接对数据宿的写操作,只有在缓冲区已满或清空流flush时,数据才输出到数据宿上。在Java 中使用输出缓冲是为了进步性能。该类有以下两个构造方法: public BufferedOutputStreamOutputStream out public BufferedOutputStreamOutputStream out, int s

33、ize7.4 过滤流 3. DataInputStream和DataOutputStream类 DataInputStream用来从一种已定义的节点输入流中读取Java根本数据类型的数据,如布尔型数、整型数、浮点数等,然后再生成一个数据输入流。DataOutputStream用来将Java根本数据类型数据写到一个数据输出流中。 这两个类的构造方法如下。 pubilc DataInputStreamInputStream in:其作用是创立一个新的DataInputStream,该流从输入流in 读取数据。 pubilc DataOutputStreamOutputStream out:其作用是在输出流out上创立一个新的DataOutputStream,使DataOutputStream 的输出数据可以输出到输出流out中。7.5 字节流与字符流的转换 1. 根本数据类型变量和包装类对象的互相转换 简单类型的变量转换为相应的包装类对象,可以利用包装类的构造函数,即:Booleanboolean value、Characterchar value、Integerint value、Lon

温馨提示

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

评论

0/150

提交评论