《Java程序设计教程》课件第十一章:输入输出流.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《Java程序设计教程》课件第十一章:输入输出流.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计教程 Java 程序设计 教程 课件 第十一 输入输出
- 资源描述:
-
1、本章学习目标:掌握File类的使用 掌握IO流的分类和体系结构 掌握字符流和字节流的使用 了解对象流和过滤流的使用 了解NIO的特点并掌握Buffer和Channel的使用第十一章第十一章 输入输入/输出流输出流第第1 1节节partI/O流概述 流是一组有序的数据序列,是实现数据输入(Input)和输出(Output)的基础,可以对数据实现读/写操作。流(Stream)的优势在于使用统一的方式对数据进行操作或传递,简化了代码操作。按照不同的分类方式,可以将流分为不同的类型。按照流的流向来分,可以将流分为输入流和输出流。输入流是只能读取数据,而不能写入数据的流;输出流是只能写入数据,而不能读取
2、数据的流,如图11.1所示。I/O流概述I/O流概述 按照流所操作的基本数据单元来分,可以将流分为字节流和字符流。字节流所操作的基本数据单元是8位的字节(byte),无论是输入还是输出,都是直接对字节进行处理;字符流所操作的基本数据单元是16位的字符(Unicode),无论是输入还是输出,都是直接对字符进行处理。按照流的角色来分,可以将流分为节点流和处理流。节点流用于从或向一个特定的IO设备(如磁盘、网络等)读/写数据的流,也称为低级流,通常是指文件、内存或管道;处理流用于对一个已经存在的流进行连接或封装,通过封装后的流来实现数据的读/写功能,也称为高级流或包装流。I/O流概述 Java的IO
3、流都是由4个抽象基类派生的,如图11.2所示。I/O流概述 其中:InputStream/Reader是所有输入流的基类,用于实现数据的读操作,前者是字节输入流,后者是字符输入流,只是处理的数据基本单位不同;OutputStream/Writer是所有输出流的基类,用于实现数据的写操作,前者是字节输出流,后者是字符输出流,只是处理的数据基本单位不同。Java的IO流体系比较复杂,共涉及40多个类,这些类彼此之间相互联系,与有一定的规律。Java按照功能将IO流分成了许多类,而每个类中又分别提供了字节输入流、字节输出流、字符输入流和字符输出流。当然有些流没有提供字节流,有些流没有提供字符流。Ja
4、va的IO流体系按照功能分类,常用的流如表11-1所示。其中,访问文件、数组、管道和字符串的流都是节点流,必须直接与指定的物理节点关联。I/O流概述 由于计算机中所有的数据都是以二进制的形式进行组织,而字节流可以处理所有二进制文件,所以通常字节流的功能比字符流的功能更强大。但是,如果使用字节流处理文本文件时,则需要使用合适的方式将字节转换成字符,从而增加了编程的复杂度。因此,在使用IO流时注意一个规则:如果进行输入输出的内容是文本内容,则使用字符流;如果输入输出的内容是二进制内容,则使用字节流。I/O流概述第第2 2节节partFile类File类 File类是java.io包下代表与平台无关
5、的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。File类中的方法可以实现文件和目录的创建、删除和重命名等,但File类不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。绝对路径是从根目录开始,对文件进行完整描述,例如“D:dataxsc.txt”;相对路径是以当前目录为参照,对文件进行描述,例如“dataxsc.txt”。File类File类 File类常用方法及功能如表11-2所示。File类下述案例示例了文件的创建以及对文件进行
6、操作和管理的应用,代码如下所示。【代码11.1】FileExample.javapackage com;import java.io.File;import java.io.IOException;public class FileExample public static void main(String args)File newFile=new File(D:data);System.out.println(创建目录:+newFile.mkdir();/以当前路径来创建一个File对象,File file=new File(D:data,xsc.txt);try file.createN
7、ewFile();/创建文件 catch(IOException e)e.printStackTrace();File类if(file.exists()System.out.println(该文件已存在);System.out.println(文件名称为:+file.getName();System.out.println(文件绝对路径为:+file.getAbsolutePath();System.out.println(文件上一级路径为:+file.getParent();/file.delete();/删除该文件 /使用list()方法来列出当前路径下的所有文件和路径 String fi
8、leList=newFile.list();System.out.println(=当前路径下所有文件和路径如下=);for(String fileName:fileList)System.out.println(fileName);File类程序运行结果如下:创建目录:true该文件已存在文件名称为:xsc.txt文件绝对路径为:D:dataxsc.txt文件上一级路径为:D:data=当前路径下所有文件和路径如下=xsc.txt 注意:在Windows操作系统下,路径的分隔符使用反斜杠“”,而Java程序中的单反斜杠表示转义字符,所以路径分割符需要使用双反斜杠。第第3 3节节part字节流
9、 字节流所处理的数据基本单元是字节,其输入/输出操作都是在字节的基础上进行。字节流的两个抽象基类是InputStream和OutputStream,其他字节流都是由这两个抽象类派生的。字节流本节概述11.3.1InputStream InputStream是字节输入流,使用InputStream可以从数据源以字节为单位进行读取数据。InputStream类中的常用方法如表11-3所示。InputStream11.3.1InputStream InputStream类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。InputStream类及其子类的关系如图11.3所示。11.3.1Inp
10、utStream InputStream常见子类及其功能描述如表11-4所示。下述案例示例了FileInputStream读文件内容,代码如下所示。11.3.1InputStream【代码11.2】FileInputStreamExample.javapackage com;import java.io.FileInputStream;import java.io.IOException;public class FileInputStreamExample public static void main(String args)/声明文件字节输入流FileInputStream fis=nu
11、ll;try/实例化文件字节输入流fis=new FileInputStream(D:dataxsc.txt);/创建一个长度为1024的字节数组作为缓冲区byte bbuf=new byte1024;/用于保存实际读取的字节数int hasRead=0;/使用循环重复读文件中的数据while(hasRead=fis.read(bbuf)0)/将缓冲区中的数据转换成字符串输出System.out.print(new String(bbuf,0,hasRead);11.3.1InputStream catch(IOException e)e.printStackTrace();finally t
12、ry/关闭文件输入流fis.close();catch(IOException e)e.printStackTrace();上述代码使用FileInputStream中的read()方法循环从文件中读取数据并输出。在读文件操作时,可能会发生IOException,因此需要将代码放在trycatch异常处理语句中。最后在finally块中,使用close()方法将文件输入流关闭,从而释放资源。11.3.2OutputStream OutputStream是字节输出流,使用OutputStream可以往数据源以字节为单位写入数据。OutputStream常用方法如表11-5所示。OutputStr
13、eam11.3.2OutputStream OutputStream类和InputStream类一样,都是抽象类,不能直接实例化,因此也是使用其子类来完成具体功能。OutputStream类及其子类的关系如图11.4所示。11.3.2OutputStream OutputStream常见子类及其功能描述如表11-4所示。下述案例示例了使用FileOutputStream类将用户输入写到指定文件中。代码如下所示。11.3.2OutputStream【代码11.3】FileOutputStreamExample.javapackage com;import java.io.FileOutputSt
14、ream;import java.io.IOException;import java.util.Scanner;public class FileOutputStreamExample public static void main(String args)/建立一个从键盘接收数据的扫描器Scanner scanner =new Scanner(System.in);/声明文件字节输出流FileOutputStream fos=null;try/实例化文件字节输出流fos=new FileOutputStream(D:dataxsc.txt);System.out.println(请输入内容
15、:);String str=scanner.nextLine();/将数据写入文件中fos.write(str.getBytes();System.out.println(已保存!);catch(IOException e)11.3.2OutputStreame.printStackTrace();finally try/关闭文件输出流fos.close();scanner.close();catch(IOException e)e.printStackTrace();上述代码使用FileOutputStream的write()方法将用户从键盘输入的字符串保存到文件中,因write()方法不能
16、直接写字符串,所以要先使用getBytes()方法将字符串转换成字节数组后在写到文件中。最后在finally块中,使用close()方法将文件输出流关闭并释放资源。11.3.2OutputStream 程序运行结果如下所示:请输入内容:我喜欢输入输出流内容的学习!已保存!上面运行结果中用户输入的“我喜欢输入输出流内容的学习!”,将保存到“D:dataxsc.txt”文件中。如果D盘不存在D:dataxsc.txt文件,程序会先创建一个,再将输入内容写入文件;如果该文件已存在,则先清空原来文件中的内容,再写入新的内容。第第4 4节节part字符流 字符流所处理的数据基本单元是字符,其输入/输出操
17、作都是在字符的基础上进行。Java语言中的字符采用Unicode字符编码,每个字符占两个字节空间,而文本文件有可能采用其他类型的编码,如GBK和UTF-8编码方式,因此在Java程序中使用字符流进行操作时,需要注意字符编码方式之间的转换。字符流的两个抽象基类是Reader和Writer,其他字符流都是由这两个抽象类派生的。字 符 流本节概述11.4.1Reader Reader是字符输入流,用于从数据源以字符为单位进行读取数据。Reader类中常用方法及功能描述如表11.5所示。Reader11.4.1Reader Reader类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。Read
18、er类及其子类的关系如图11.5所示。11.4.1Reader Reader类常用子类及其功能描述如表11.6所示。下述案例示例了使用FileReader和BufferedReader读取文件的内容并输出,代码如下所示。11.4.1Reader【代码11.4】ReaderExample.javapackage com;import java.io.BufferedReader;import java.io.FileReader;public class ReaderExample public static void main(String args)/声明一个BufferedReader流的
19、对象BufferedReader br=null;try/实例化BufferedReader流,连接FileReader流用于读文件br=new BufferedReader(new FileReader(D:dataxsc.txt);String result=null;/循环读文件,一次读一行while(result=br.readLine()!=null)/输出System.out.println(result);catch(Exception e)e.printStackTrace();finally 11.4.1Readertry/关闭缓冲流br.close();catch(Exce
20、ption ex)ex.printStackTrace();上述代码中,首先声明了一个BufferedReader类型的对象,在实例化该缓冲字符流时创建一个FileReader流作为BufferedReader构造方法的参数,如此两个流就连接在一起,可以对文件进行操作;然后使用BufferedReader的readLine()方法一次读取文件中的一行内容,循环读文件并显示。BufferedReader类中readLine()方法是按行读取,当读取到流的末尾时返回null,所以可以根据返回值是否为null来判断文件是否读取完毕。11.4.2Writer Reader是字符输入流,用于从数据源以字
21、符为单位进行读取数据。Reader类中常用方法及功能描述如表11.5所示。Writer11.4.2Writer Writer类是抽象类,不能直接实例化,因此使用其子类来完成具体功能。Writer类及其子类的关系如图11.6所示。下述案例示例了使用FileWriter将用户输入的数据写入指定的文件中,代码如下所示。11.4.2Writer【代码11.5】WriterExample.javapackage com;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;public class Wr
22、iterExample public static void main(String args)/建立一个从键盘接收数据的扫描器Scanner scanner =new Scanner(System.in);/声明文件字符输出流FileWriter fw=null;try/实例化文件字符输出流fw=new FileWriter(D:dataxsc.txt);System.out.println(请输入内容:);String str=scanner.nextLine();/将数据写入文件中fw.write(str);System.out.println(已保存!);catch(IOExcepti
23、on e)11.4.2Writere.printStackTrace();finally try/关闭文件字符输出流fw.close();scanner.close();catch(IOException e)e.printStackTrace();程序运行结果如下所示:请输入内容:我们努力学习FileWriter类的应用!已保存!第第5 5节节part过滤器和转换器11.5.1过 滤 流 过滤流用于对一个已有的流进行连接和封装处理,以更加便利的方式对数据进行读/写操作。过滤流又分为过滤输入流和过滤输出流。FilterInputStream为过滤输入流,该类的子类如图11.7所示。过滤流11.
24、5.1过 滤 流 FilterInputStream各个子类的功能描述如表11-8所示。下述案例示例了BufferedInputStream类的使用,代码如下所示。11.5.1过 滤 流【代码11.6】BufferedInputStreamExample.javapackage com;import java.io.BufferedInputStream;import java.io.FileInputStream;public class BufferedInputStreamExample public static void main(String args)/定义一个BufferedI
25、nputStream类型的变量BufferedInputStream bi=null;try/利用FileInputStream对象创建一个输入缓冲流bi=new BufferedInputStream(new FileInputStream(D:dataxsc.txt);int result=0;/循环读数据while(result=bi.read()!=-1)/输出System.out.print(char)result);catch(Exception e)e.printStackTrace();finally 11.5.1过 滤 流try/关闭缓冲流bi.close();catch(E
展开阅读全文