Java 第9章 输入输出流.ppt
《Java 第9章 输入输出流.ppt》由会员分享,可在线阅读,更多相关《Java 第9章 输入输出流.ppt(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第9章 输入输出流本章知识框图学习重点:o掌握基本输入输出流。o掌握按数据类型操作输入输出流。o掌握输入输出对象。o掌握文件/目录操作。oJava采用“流”(Stream)来完数据的输入(Input)和输出(Output),输入输出简称I/O。从外部数据源将数据读入程序的流称为输入流,从程序中将数据写入外部数据源的流称为输出流。外部数据源可以是磁盘文件、程序、内存或硬件设备。可以按字节、字符或类型化的数据进行输入输出。也可以将对象写入文件,或从文件中读出对象。本章将详细介绍各种常用的输入输出流操作。9.1 基本输入输出流o基本的输入输出流包括字节流、字符流和缓冲流。在输入时,可使用Scanne
2、r对象从流读取特定类型的数据。在输出时,可以对输出格式进行控制。9.1.1 字节流o字节流按字节(8位二进制)输入和输出数据。Java定义了很多字节流类,这些类都是两个抽象类InputStream和OutputStream.的派生类。本节主要讲解两个基本的字节流类:FileInputStream(文件输入流)和FileOutputStream(文件输出流)。1、创建FileInputStream对象o可用下列方法创建文件输入流对象:(1)FileInputStream(File file)用File对象创建一个FileInputStream对象,File对象指定实际访问的磁盘文件。例如:Fil
3、eInputStream datain=new FileInputStream(new File(datafile.txt);文件datafile.txt没有指定路径,默认与应用程序在相同目录中。如果未找到指定文件,则抛出FileNotFoundException异常。(2)FileInputStream(FileDescriptor fdObj)用FileDescriptor对象创建一个FileInputStream对象。例如:FileInputStream datain=new FileInputStream(FileDescriptor.in);FileDescriptor定义了3个静态
4、对象,FileDescriptor.in等价于System.in,FileDescriptor.out等价于System.out,FileDescriptor.err等价于System.err。创建FileInputStream对象时,只能使用FileDescriptor.in。采用这种方式创建的FileInputStream对象可以从键盘读取数据。(3)FileInputStream(String name)用指定的文件名创建一个FileInputStream对象。例如:FileInputStream datain=new FileInputStream(datafile.txt);Wind
5、ows环境中的路径分隔符号为“”,可用“”或“/”作为路径分隔符。例如:FileInputStream datain=new FileInputStream(d:javatempchapter09datafile.txt);2、FileInputStream对象操作oFileInputStream对象常用操作如下:navailable():返回可读的字节数。若没有可读数据,返回值为0。nclose():关闭文件输入流。nread():从输入流读取一个字节,返回值类型为int。若没有可读数据,返回-1。nread(byte b):从输入流读取数据,按顺序放入b的各个数组元素中。返方法回值类型为i
6、nt,表示从流中读取的总的字节数。若没有可读数据,返回值为-1。nread(byte b,int bindex,int count):最多从输入流读取count个字节,按顺序放入b数组中下标从bindex开始的元素中。返方法回值类型为int,表示从流中读取的总的字节数。若没有可读数据,返回值为-1。nskip(long n):在流中跳过n个字节。n不能为负数,否则产生错误。nFileInputStream对象的各个方法在出现错误时,会抛出IOException异常。IOException异常属于检查异常,必须在代码中捕捉或声明方法抛出【例9.1】o使用FileInputStream对象读取文件
7、数据。(源文件位置:光盘:chapter09.useFileInputStream.java,光盘:chapter09datafile.txt)ouseFileInputStream从文本文件datafile.txt中读取数据,并显示在命令提示符窗口中。datafile.txt文件内容如下:o1:first lineo2:second lineo3:third lineo程序代码如下:import java.io.*;public class useFileInputStream public static void main(String args)throws IOException Fi
8、leInputStream in=null;try in=new FileInputStream(datafile.txt);System.out.println(文件总字节数:+in.available();System.out.println(*文件内容如下*);int c;while(in.available()!=0)/如果还有可读数据则循环 c=in.read();/读一个字节 /read方法返回的是int型数据,要按字符输出,/所以用char强制转换数据类型。/如果不转换,输出为字符ASCII码的十进制值 System.out.print(char)c);/输出 System.ou
9、t.println(*文件内容结束*);in.close();/关闭流 in=new FileInputStream(datafile.txt);/重新建立文件输入流 int count=0;byte b=new byte5;in.skip(16);/跳过16个字节 if(in.available()!=0)count=in.read(b);/从流读取数据到字节数组 System.out.print(用数组读出的数据:);for(int i=0;icount;i+)System.out.printf(%-4d,bi);System.out.print(n 对应的字符:);for(int i=0
10、;icount;i+)System.out.printf(%-4s,(char)bi);finally if(in!=null)in.close();/关闭流 o代码中使用了FileInputStream的各种方法,这些方法可能产生IOException异常。代码中没有使用catch处理IOException异常,所以在main方法的参数表之后使用throws关键字声明方法可能抛出IOException异常。o程序在finally代码块中关闭文件输入流。如果没有在程序中调用close方法关闭流,系统可自动将其关闭。close方法在关闭流的同时,释放维护流使用的相同资源,所以建议读者在代码中显式
11、调用close方法关闭流,以便提供相同效率。程序将关闭流操作放在finally代码块中,这是因为不管程序运行是否有错,finally代码都会执行,从而保证关闭流。o说明:说明:本例中datafile.txt文件内容为ASCII码字符。如果文件中包含非ASCII码字符,比如汉字,按字节读取会导致非ASCII码字符不能读取和显示。3、创建FileOutputStream对象o可用下列方法创建FileOutputStream对象:(1)FileOutputStream(File file)o用指定File对象创建文件输出流,向File对象指定的文件输出数据。该方法始终创建一个新文件。如果已存在同名文
12、件,原文件被覆盖。File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。例如:oFileOutputStream dataout=new FileOutputStream(new File(outdatafile.txt);(2)FileOutputStream(File file,boolean append)o参数append为false时,与FileOutputStream(File file)相同。参数append为true时,表示向文件添加数据。例如:oFileOutputStream dataout=new FileOutputSt
13、ream(new File(outdatafile.txt),true);(3)FileOutputStream(FileDescriptor fdObj)o用FileDescriptor对象创建文件输出流。例如:oFileOutputStream dataout=new FileOutputStream(FileDescriptor.out);(4)FileOutputStream(String name)o用指定文件名创建文件输出流,向文件输出数据,与FileOutputStream(File file)方法类似。例如:oFileOutputStream dataout=new FileO
14、utputStream(outdatafile.txt);(5)FileOutputStream(String name,boolean append)o参数append为false时,与FileOutputStream(String name)相同。参数append为true时,表示向文件添加数据。例如:oFileOutputStream dataout=new FileOutputStream(outdatafile.txt,true);4、FileOutputStream对象操作oFileOutputStream对象常用操作如下:oclose():关闭文件输出流。oflush():刷新流
15、,即向流中的数据全部写入文件。owrite(int n):向文件写入一个字节。如果n大于255,即多余一个字节,则将n的最后一个字节写入文件。写入文件的字节视为字符的ASCII码。例如,write(65)写入文件的是字符A(其ASCII码为65)。owrite(byte b):将字节数组b中的数据按顺序写入文件。owrite(byte b,int bindex,int count):将字节数组b中下标从bindex开始的count个元素写入文件。oFileOutputStream对象的各个方法在出现错误时,会抛出IOException异常。【例9.2】o使用FileOutputStream对象
16、向文件写数据。(源文件位置:光盘:chapter09.useFileOutputStream.java,光盘:chapter09outdatafile.txt,光盘:chapter09datafile2.txt)ouseFileOutputStream首先将文本文件datafile2.txt中的数据复制到新文件outdatafile.txt中,再为文件添加部分数据。datafile2.txt文件内容如下:o 春晓o春眠不觉晓o处处闻啼鸟o夜来风雨声o花落知多少o程序代码如下:/将文件datafile2.txt中的数据复制到outdatafile.txt文件中,并添加部分数据import jav
17、a.io.*;public class useFileOutputStream public static void main(String args)throws IOException FileInputStream in=null;FileOutputStream out=null;try in=new FileInputStream(datafile2.txt);out=new FileOutputStream(outdatafile.txt);/复制文件 while(in.available()!=0)/如果还有可读数据则循环 out.write(in.read();out.clos
18、e();/关闭输出流 /重新打开文件,添加数据 out=new FileOutputStream(outdatafile.txt,true);out.write(n);/写入一个换行符 /24897的二进制为110000101000001,第二个字节为字符A的 /ASCII码,所以下面的语句实际写入的是字符A out.write(24897);out.write(n);/写入一个换行符 byte b=new byte10;for(byte i=0;ib.length;i+)bi=(byte)(97+i);out.write(b);/将输入写入文件,实际写入abcdefghij System.o
19、ut.println(文件操作结束!);finally if(in!=null)in.close();/关闭流 if(out!=null)out.close();/关闭流 9.1.2 字符流o字符流按字符读取和写入数据。Java采用Unicode字符,在读写文件时,字符流可以自动将文件中的本地字符转换为Unicode字符。本节介绍两个字符流类:FileReader(读文件)和FileWriter(写文件)。oFileReader和FileWriter类的基类分别为InputStreamReader和OutputStreamWriter类,InputStreamReader和OutputStre
20、amWriter类分别继承抽象类Reader和Writer。InputStreamReader和OutputStreamWriter类可以按本地字符集和指定字符集读写文件。文件中的数据仍按字节读写,InputStreamReader和OutputStreamWriter流完成字符和字节的转换。FileReader和FileWriter流采用本地字符集读写文件。1、创建FileReader对象可用下列方法创建FileReader对象:oFileReader(File file)用File对象创建一个FileReader对象,File对象指定实际访问的磁盘文件。例如:FileReader data
21、in=new FileReader(new File(datafile.txt);oFileReader(FileDescriptor fdObj)用FileDescriptor对象创建一个FileReader对象。例如:FileReader datain=new FileReader(FileDescriptor.in);oFileReader(String name)用指定的文件名创建一个FileReader对象。例如:FileReader datain=new FileReader(d:javatempchapter09datafile.txt);2、FileReader流常用操作Fil
22、eReader流常用操作如下:ngetEncoding():返回文件采用的字符集。nclose():关闭流。nread():从流读取一个字符,返回值类型为int。若没有可读数据,返回-1。nread(char b):从流读取字符,按顺序放入b的各个数组元素中。返方法回值类型为int,表示从流中读取的总的字符数。若没有可读数据,返回值为-1。nread(char b,int bindex,int count):最多从输入流读取count个字符,按顺序放入b数组中下标从bindex开始的元素中。返方法回值类型为int,表示从流中读取的总的字符数。若没有可读数据,返回值为-1。nskip(long
23、n):在流中跳过n个字符。n不能为负数,否则产生错误。3、创建FileWriter对象可用下列方法创建FileWriter对象:oFileWriter(File file)用指定File对象创建FileWriter流,向File对象指定的文件输出数据。该方法始终创建一个新文件。如果已存在同名文件,原文件被覆盖。File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。例如:FileWriter dataout=new FileWriter(new File(outdatafile.txt);oFileWriter(File file,boolean
24、 append)参数append为false时,与FileWriter(File file)相同。参数append为true时,表示向文件添加数据。例如:FileWriter dataout=new FileWriter(new File(outdatafile.txt),true);oFileWriter(FileDescriptor fdObj)用FileDescriptor对象创建FileWriter流。例如:FileWriter dataout=new FileWriter(FileDescriptor.out);oFileWriter(String name)用指定文件名创建File
25、Writer流,向文件输出数据,与FileWriter(File file)方法类似。例如:FileWriter dataout=new FileWriter(outdatafile.txt);oFileWriter(String name,boolean append)参数append为false时,与FileWriter(String name)相同。参数append为true时,表示向文件添加数据。例如:FileWriter dataout=new FileWriter(outdatafile.txt,true);4、FileWriter对象操作FileWriter对象常用操作如下:oc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 第9章 输入输出流 输入输出
限制150内