《《java 2面向对象程序设计基础》输入与输出ppt》由会员分享,可在线阅读,更多相关《《java 2面向对象程序设计基础》输入与输出ppt(49页珍藏版)》请在金锄头文库上搜索。
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 输入/输出包,
2、7.1.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还提供了文件操作的类,它们是Fil
4、e和RandomAccessFile。 File:文件和目录路径名的抽象表示形式。 RandomAccessFile:此类的实例支持对随机存取文件的读取和写入。,7.1.2 InputStream类常用接口,该类是一个抽象类,其包含的方法如下。 abstract int read():读取一个字节数据,并返回读到的数据。如果返回-1,表示读到了输入流的末尾。 int read(byte b):将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。 int read(byte b, int off, int len):将数据读入一个字节数组,同时返回实际读取的字
5、节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。,7.1.2 InputStream类常用接口,【例7.1】下面是一个具体字节流输入的应用举例(假设在磁盘上的D盘的Javacode文件夹里有test.txt文件),程序如下: Import java.io.*; class test public static void main(String args) throws Exception FileInputStream fis =new FileInputStream (“d:Javacodetest.txt“); byteb
6、uf=new byte100; int len=fis.read(buf); fis.close(); System.out.println(new String(buf); 运行结果如图7-7所示。,7.1.2 InputStream类常用接口,图7-7 运行结果(例7.1),7.1.3 OutputStream类常用接口,OutputStream类中的常用方法如下。 abstract void write(int b):往输出流中写入一个字节。 void write(byte b):往输出流中写入数组b中的所有字节。 void write(byte b, int off, int len)
7、:往输出流中写入数组b中从偏移量off开始的len个字节的数据。其中第一个方法的int型的参数对应要写入的字节,后两个方法的参数与InputStream类似。 void close():关闭输出流。 void flush():强行将写入缓冲区中剩余的数据写入。,7.1.3 OutputStream类常用接口,【例7.2】用OutputStream的一个派生类FileOutputStream的应用举例,程序如下。 import java.io.*; class test public static void main(String args) throws Exception FileInput
8、Stream fis = new FileInputStream(“d:Javacodetest.txt“); bytebuf2=new byte100; FileOutputStream fos=new FileOutputStream (“d:Javacodetest.txt“); fos.write(“Hello Java!“.getBytes(); fos.close(); int len=fis.read(buf2); System.out.println(“以下是写入文件里面的内容“); System.out.println(new String(buf2); fis.close(
9、); ,7.1.3 OutputStream类常用接口,运行结果如图7-8所示。 图7-8 运行结果(例7.2),7.1.4 Reader类常用接口,在Reader类中主要有以下几个方法。 close():关闭流。 mark(int):标记此流的当前位置。 markSupported():报告此流是否支持 mark() 操作。 read():读取单一字符。 read(char):将字符读到一数组。 read(char, int, int):将若干字符读入一个数组中。 ready():报告此流是否已准备读。 reset():复位流。 skip(long):跳过若干字符。 但是,为了提供更高的效率
10、或额外的功能或两者兼备,大部分子类只覆盖此处定义的方法中的某些方法。,7.1.4 Reader类常用接口,【例7.3】利用Reader的子类BufferedReader从文件file1.txt文件中读取数据。其中方法readLine是进行整行的读取。程序如下。 import java.io.*; class filestream2 public static void main(String args) throws Exception FileInputStream fis=new FileInputStream(“file1.txt“); InputStreamReader isr=new
11、 InputStreamReader(fis); BufferedReader br=new BufferedReader(isr); String strline; while(strline=br.readLine()!=null) System.out.println(strline); ,7.1.5 Writer类常用接口,Writer类中的方法和OutputStream类的方法类似,只不过Writer类中的方法的参数换成了字符或字符数组。它的常用方法如下。 close():先刷新然后关闭此流。 flush():刷新流。 write(char):写入一个字符数组。 write(char
12、, int, int):部分写入一个字符数组。 write(int):写入单一字符。 write(String):写入一串。 write(String, int, int):写入一串的某部分。,7.1.5 Writer类常用接口,【例7.4】利用Writer的子类BufferedWriter向文件中写入数据,再用BufferedReader从文件中读取刚写入的数据,程序如下。 import java.io.*; class filestream2 public static void main(String args) throws Exception FileOutputStream fos
13、=new FileOutputStream(“file1.txt“); OutputStreamWriter osw=new OutputStreamWriter(fos); BufferedWriter bw=new BufferedWriter(osw); FileInputStream fis=new FileInputStream(“file1.txt“); InputStreamReader isr=new InputStreamReader(fis); BufferedReader br=new BufferedReader(isr); String strline; bw.wri
14、te(“Java Bufferedwriter writer some thing!“); bw.close(); while(strline=br.readLine()!=null) System.out.println(strline); br.close(); ,7.1.5 Writer类常用接口,运行结果如图7-9所示。 图7-9 运行结果(例7.4),7.2 常用的输入/输出流,7.2.1 标准输入/输出 7.2.2 操作目录和文件 7.2.3 文件流 7.2.4 随机文件的访问,7.2 常用的输入/输出流,本节介绍Java中常用的输入输出流,熟练地掌握它们更有利于进行Java程序开
15、发。,7.2.1 标准输入/输出,System类管理标准输入输出流和错误流。 System.out:把输出送到默认的显示设备(通常是显示器),System.out属于PrintStream类型。 System.in:从标准输入(键盘)获取输入,System.in属于BufferedInputStream类型。 System.err:把错误信息送到默认的显示,System.err也是属于PrintStream类型。 每当main方法被执行时,就自动生成上述3个对象。,7.2.1 标准输入/输出,【例7.5】重定向输出打印结果举例,代码如下。 import java.io.File; import
16、 java.io.FileOutputStream; import java.io.PrintStream; class Test public static void main(String args) File test = new File(“test.txt“); PrintStream out = null; PrintStream oldout = System.out; try ,7.2.1 标准输入/输出,out = new PrintStream(new FileOutputStream(test); System.setOut(out); System.out.println(“这是在文件中输出的结果“); /System.out.println(out); /System.out.println(System.out); System.