第9章 输入输出流.docx

上传人:b****3 文档编号:6971790 上传时间:2023-05-10 格式:DOCX 页数:17 大小:31.29KB
下载 相关 举报
第9章 输入输出流.docx_第1页
第1页 / 共17页
第9章 输入输出流.docx_第2页
第2页 / 共17页
第9章 输入输出流.docx_第3页
第3页 / 共17页
第9章 输入输出流.docx_第4页
第4页 / 共17页
第9章 输入输出流.docx_第5页
第5页 / 共17页
第9章 输入输出流.docx_第6页
第6页 / 共17页
第9章 输入输出流.docx_第7页
第7页 / 共17页
第9章 输入输出流.docx_第8页
第8页 / 共17页
第9章 输入输出流.docx_第9页
第9页 / 共17页
第9章 输入输出流.docx_第10页
第10页 / 共17页
第9章 输入输出流.docx_第11页
第11页 / 共17页
第9章 输入输出流.docx_第12页
第12页 / 共17页
第9章 输入输出流.docx_第13页
第13页 / 共17页
第9章 输入输出流.docx_第14页
第14页 / 共17页
第9章 输入输出流.docx_第15页
第15页 / 共17页
第9章 输入输出流.docx_第16页
第16页 / 共17页
第9章 输入输出流.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第9章 输入输出流.docx

《第9章 输入输出流.docx》由会员分享,可在线阅读,更多相关《第9章 输入输出流.docx(17页珍藏版)》请在冰点文库上搜索。

第9章 输入输出流.docx

第9章输入输出流

第9章输入输出流WORD文档使用说明:

第9章输入输出流来源于PDFWORD

本WOED文件是采用在线转换功能下载而来,因此在排版和显示效果方面可能不能满足您的应用需求。

如果需要查看原版WOED文件,请访问这里

第9章输入输出流文件原版地址:

第9章输入输出流|PDF转换成WROD_PDF阅读器下载

第9章输入输出流

本章知识框图

学习重点:

掌握基本输入输出流。

掌握按数据类型操作输入输出流。

掌握输入输出对象。

掌握文件/目录操作。

Java采用“流”(Stream)来完数据的输入(Input)和输出(Output),输入输出简称I/O。

从外部数据源将数据读入程序的流称为输入流,从程序中将数据写入外部数据源的流称为输出流。

外部数据源可以是磁盘文件、程序、内存或硬件设备。

可以按字节、字符或类型化的数据进行输入输出。

也可以将对象写入文件,或从文件中读出对象。

本章将详细介绍各种常用的输入输出流操作。

基本输入输出流

基本的输入输出流包括字节流、字符流和缓冲流。

在输入时,可使用Scanner对象从流读取特定类型的数据。

在输出时,可以对输出格式进行控制。

字节流

字节流按字节(8位二进制)输入和输出数据。

Java定义了很多字节流类,这些类都是两个抽象类InputStream和OutputStream.的派生类。

本节主要讲解两个基本的字节流类:

FileInputStream(文件输入流)和FileOutputStream(文件输出流)。

1、创建FileInputStream对象

可用下列方法创建文件输入流对象:

(1)FileInputStream(Filefile)用File对象创建一个FileInputStream对象,File对象指定实际访问的磁盘文件。

例如:

FileInputStreamdatain=newFileInputStream(newFile(""));文件没有指定路径,默认与应用程序在相同目录中。

如果未找到指定文件,则抛出FileNotFoundException异常。

(2)FileInputStream(FileDescriptorfdObj)用FileDescriptor对象创建一个FileInputStream对象。

例如:

FileInputStreamdatain=newFileInputStream();FileDescriptor定义了3个静态对象,等价于,等价于,等价于。

创建FileInputStream对象时,只能使用。

采用这种方式创建的FileInputStream对象可以从键盘读取数据。

(3)FileInputStream(Stringname)用指定的文件名创建一个FileInputStream对象。

例如:

FileInputStreamdatain=newFileInputStream("");Windows环境中的路径分隔符号为“\”,可用“\\”或“/”作为路径分隔符。

例如:

FileInputStreamdatain=newFileInputStream("d:

\\javatemp\\chapter09\\");

2、FileInputStream对象操作

FileInputStream对象常用操作如下:

available():

返回可读的字节数。

若没有可读数据,返回值为0。

close():

关闭文件输入流。

read():

从输入流读取一个字节,返回值类型为int。

若没有可读数据,返回-1。

read(byte[]b):

从输入流读取数据,按顺序放入b的各个数组元素中。

返方法回值类型为int,表示从流中读取的总的字节数。

若没有可读数据,返回值为-1。

read(byte[]b,intbindex,intcount):

最多从输入流读取count个字节,按顺序放入b数组中下标从bindex开始的元素中。

返方法回值类型为int,表示从流中读取的总的字节数。

若没有可读数据,返回值为-1。

skip(longn):

在流中跳过n个字节。

n不能为负数,否则产生错误。

FileInputStream对象的各个方法在出现错误时,会抛出IOException异常。

IOException异常属于检查异常,必须在代码中捕捉或声明方法抛出

【例】

使用FileInputStream对象读取文件数据。

(源文件位置:

光盘:

\chapter09\.,光盘:

\chapter09\)useFileInputStream从文本文件中读取数据,并显示在命令提示符窗口中。

文件内容如下:

1:

firstline2:

secondline3:

thirdline

程序代码如下:

import.*;publicclassuseFileInputStream{publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamin=null;try{in=newFileInputStream("");("文件总字节数:

"+());("****文件内容如下****");intc;

while(()!

=0)//如果还有可读数据则循环{c=();//读一个字节//read方法返回的是int型数据,要按字符输出,//所以用char强制转换数据类型。

//如果不转换,输出为字符ASCII码的十进制值((char)c);//输出}("****文件内容结束****");();//关闭流in=newFileInputStream("");//重新建立文件输入流intcount=0;byteb[]=newbyte[5];(16);//跳过16个字节

if(()!

=0)count=(b);//从流读取数据到字节数组("用数组读出的数据:

");for(inti=0;i

");for(inti=0;i

=null)();//关闭流}}}

代码中使用了FileInputStream的各种方法,这些方法可能产生IOException异常。

代码中没有使用catch处理IOException异常,所以在main方法的参数表之后使用throws关键字声明方法可能抛出IOException异常。

程序在finally代码块中关闭文件输入流。

如果没有在程序中调用close方法关闭流,系统可自动将其关闭。

close方法在关闭流的同时,释放维护流使用的相同资源,所以建议读者在代码中显式调用close方法关闭流,以便提供相同效率。

程序将关闭流操作放在finally代码块中,这是因为不管程序运行是否有错,finally代码都会执行,从而保证关闭流。

说明:

说明:

本例中文件内容为ASCII码字符。

如果文件中包含非ASCII码字符,比如汉字,按字节读取会导致非ASCII码字符不能读取和显示。

3、创建FileOutputStream对象

可用下列方法创建FileOutputStream对象:

(1)FileOutputStream(Filefile)用指定File对象创建文件输出流,向File对象指定的文件输出数据。

该方法始终创建一个新文件。

如果已存在同名文件,原文件被覆盖。

File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。

例如:

FileOutputStreamdataout=newFileOutputStream(newFile(""));

(2)FileOutputStream(Filefile,booleanappend)参数append为false时,与FileOutputStream(Filefile)相同。

参数append为true时,表示向文件添加数据。

例如:

FileOutputStreamdataout=newFileOutputStream(newFile(""),true);(3)FileOutputStream(FileDescriptorfdObj)用FileDescriptor对象创建文件输出流。

例如:

FileOutputStreamdataout=newFileOutputStream();(4)FileOutputStream(Stringname)用指定文件名创建文件输出流,向文件输出数据,与FileOutputStream(Filefile)方法类似。

例如:

FileOutputStreamdataout=newFileOutputStream("");(5)FileOutputStream(Stringname,booleanappend)参数append为false时,与FileOutputStream(Stringname)相同。

参数append为true时,表示向文件添加数据。

例如:

FileOutputStreamdataout=newFileOutputStream("",true);

4、FileOutputStream对象操作

FileOutputStream对象常用操作如下:

close():

关闭文件输出流。

flush():

刷新流,即向流中的数据全部写入文件。

write(intn):

向文件写入一个字节。

如果n大于255,即多余一个字节,则将n的最后一个字节写入文件。

写入文件的字节n视为字符的ASCII码。

例如,write(65)写入文件的是字符AASCIIwrite(65)A(其ASCII码为65)。

write(byte[]b):

将字节数组b中的数据按顺序写入文件。

write(byte[]b,intbindex,intcount):

将字节数组b中下标从bindex开始的count个元素写入文件。

FileOutputStream对象的各个方法在出现错误时,会抛出IOException异常。

【例】

使用FileOutputStream对象向文件写数据。

(源文件位置:

光盘:

\chapter09\.,光盘:

\chapter09\,光盘:

\chapter09\)useFileOutputStream首先将文本文件中的数据复制到新文件中,再为文件添加部分数据。

文件内容如下:

春晓春眠不觉晓处处闻啼鸟夜来风雨声花落知多少

程序代码如下:

//将文件中的数据复制到文件中,并添加部分数据import.*;publicclassuseFileOutputStream{publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamin=null;FileOutputStreamout=null;try{in=newFileInputStream("");out=newFileOutputStream("");

//复制文件while(()!

=0)//如果还有可读数据则循环(());();//关闭输出流//重新打开文件,添加数据out=newFileOutputStream("",true);('\n');//写入一个换行符//24897的二进制为110000101000001,第二个字节为字符A的//ASCII码,所以下面的语句实际写入的是字符A(24897);('\n');//写入一个换行符byteb[]=newbyte[10];for(bytei=0;i<;i++)b[i]=(byte)(97+i);(b);//将输入写入文件,实际写入abcdefghij("文件操作结束!

");}finally{if(in!

=null)();if(out!

=null)();}}}//关闭流//关闭流

字符流

字符流按字符读取和写入数据。

Java采用Unicode字符,在读写文件时,字符流可以自动将文件中的本地字符转换为Unicode字符。

本节介绍两个字符流类:

FileReader(读文件)和FileWriter(写文件)。

FileReader和FileWriter类的基类分别为InputStreamReader和OutputStreamWriter类,InputStreamReader和OutputStreamWriter类分别继承抽象类Reader和Writer。

InputStreamReader和OutputStreamWriter类可以按本地字符集和指定字符集读写文件。

文件中的数据仍按字节读写,InputStreamReader和OutputStreamWriter流完成字符和字节的转换。

FileReader和FileWriter流采用本地字符集读写文件。

1、创建FileReader对象

可用下列方法创建FileReader对象:

FileReader(Filefile)用File对象创建一个FileReader对象,File对象指定实际访问的磁盘文件。

例如:

FileReaderdatain=newFileReader(newFile(""));FileReader(FileDescriptorfdObj)用FileDescriptor对象创建一个FileReader对象。

例如:

FileReaderdatain=newFileReader();FileReader(Stringname)用指定的文件名创建一个FileReader对象。

例如:

FileReaderdatain=newFileReader("d:

\\javatemp\\chapter09\\");

2、FileReader流常用操作

FileReader流常用操作如下:

getEncoding():

返回文件采用的字符集。

close():

关闭流。

read():

从流读取一个字符,返回值类型为int。

若没有可读数据,返回-1。

read(char[]b):

从流读取字符,按顺序放入b的各个数组元素中。

返方法回值类型为int,表示从流中读取的总的字符数。

若没有可读数据,返回值为-1。

read(char[]b,intbindex,intcount):

最多从输入流读取count个字符,按顺序放入b数组中下标从bindex开始的元素中。

返方法回值类型为int,表示从流中读取的总的字符数。

若没有可读数据,返回值为-1。

skip(longn):

在流中跳过n个字符。

n不能为负数,否则产生错误。

3、创建FileWriter对象

可用下列方法创建FileWriter对象:

FileWriter(Filefile)用指定File对象创建FileWriter流,向File对象指定的文件输出数据。

该方法始终创建一个新文件。

如果已存在同名文件,原文件被覆盖。

File对象指定的是一个文件夹或者文件路径错误,则会产生FileNotFoundException异常。

例如:

FileWriterdataout=newFileWriter(newFile(""));FileWriter(Filefile,booleanappend)参数append为false时,与FileWriter(Filefile)相同。

参数append为true时,表示向文件添加数据。

例如:

FileWriterdataout=newFileWriter(newFile(""),true);

FileWriter(FileDescriptorfdObj)用FileDescriptor对象创建FileWriter流。

例如:

FileWriterdataout=newFileWriter();FileWriter(Stringname)用指定文件名创建FileWriter流,向文件输出数据,与FileWriter(Filefile)方法类似。

例如:

FileWriterdataout=newFileWriter("");FileWriter(Stringname,booleanappend)参数append为false时,与FileWriter(Stringname)相同。

参数append为true时,表示向文件添加数据。

例如:

FileWriterdataout=newFileWriter("",true);

4、FileWriter对象操作

FileWriter对象常用操作如下:

close():

关闭FileWriter流。

flush():

刷新流,即向流中的数据全部写入文件。

getEncoding():

返回文件采用的字符集。

write(intn):

向文件写入一个字符,n为字符的Unicode码。

write(char[]b):

将字符数组b写入文件。

write(char[]b,intbindex,intcount):

将字符数组b中下标从bindex开始的count个元素写入文件。

write(Stringb):

将字符串b写入文件。

write(Stringb,intindex,intcount):

将字符串b中序号从index开始的count个字符写入文件。

append(charc):

将字符c写入文件。

append(CharSequence[]b):

将字符序列b写入文件。

String类型为一个典型的实现了CharSequence接口的类。

append(CharSequence[]b,intstart,intend):

将字符串序列b中下标start开始到end的字符写入文件。

缓冲流

前面前面介绍的字节流和字符流均未使用内存缓冲区,也就是说,每次读写一个字节或字符都是直接访问文件,这会导致大量数据读写时频繁访问文件。

缓冲输入输出流则是在内存中创建一个缓冲区来缓存数据。

程序只是从缓冲区读取数据,不直接访问文件。

输入数据时,缓冲流在缓冲区为空时自动从文件读取数据填满缓冲区。

输出数据时,数据首先写入缓冲区,缓冲区填满或执行flush方法时,缓冲流将缓冲的数据写入文件。

Java提供了4种缓冲流,BufferedInputStream和Java4BufferedInputStreamBufferedOutputStream用于缓冲字节流,BufferedReader和BufferedWriter用于缓冲字符流。

可以创建默认大小缓冲区的缓冲流。

例如:

BufferedReaderin=newBufferedReader(newFileReader(""));也可创建指定大小缓冲区的缓冲流。

例如:

BufferedWriterout=newBufferedWriter(newFileWriter(""),100);

格式化输入输出

字节流和字符流只是按字节或字符读写文件。

如果要从读取特定类型的数据,例如读一个整数,则需要使用Scanner对象。

在将特定类型的数据写入文件,则可使用PrintWriter或PrintStream对象完成输出。

格式化输入

Scanner对象可以按基本数据类型从字符串或各种输入流中解析数据。

1、创建Scanner对象

Scanner类的构造方法有两种基本格式:

Scanner(数据源)Scanner(数据源,字符集)创建Scanner对象的数据源可以是一个字符串、File对象、InputStream对象、InputStream子类对象、Readable对象或ReadableByteChannel对象。

例如:

Scannerin1=newScanner("1one2two");Scannerin2=newScanner(newFile(""));Scannerin3=newScanner(newFileReader(""));Scannerin4=newScanner(newFileReader(""));Scannerin5=newScanner(newFileInputStream(""));Scannerin6=newScanner(newBufferedReader(newFileReader("")));

在创建访问各种流的Scanner对象时,可用一个字符串指明数据源采用的字符集,默认为本地字符集。

从文件读出字节时,将其转换为指定字符集的字符。

例如:

Scannerin2=newScanner(newFile(""),"GB2312");//指定采用的字符集Scanner对象在不使用之后,应调用close方法将其关闭。

例如:

in1close();

2、从数据源解析数据

Scanner对象用一系列的next方法从数据源解析各种类型的数据:

next():

从数据源读取一个字符串。

nextLine():

将当前位置到换行符号之前的全部内容作为一个字符串返回。

nextBoolean()nextBoolean():

从数据源读取一个boolean类型值。

booleannextByte():

从数据源读取一个byte类型值。

nextDouble():

从数据源读取一个double类型值。

nextFloat():

从数据源读取一个float类型值。

nextInt():

从数据源读取一个int类型。

nextLong():

从数据源读取一个long类型值。

nextShort():

从数据源读取一个short类型值。

在使用各种next方法读取数据时,可能会发生下列三种异常:

InputMismatchException:

如果下一个标记不能转换为指定类型的数据,或者超出了数据范围。

NoSuchElementException:

数据源中已无数据可读。

IllegalStateException:

Scanner对象已被关闭。

这3种异常属于不检查异常,可以不捕捉处理。

格式化输出

PrintStream和PrintWriter类提供了格式化输出方法,可用print、printf、println和format方法输出各种基本数据类型的数据,也可输出对象。

printf和format方法用法相同,均可使用格式字符串来控制数据的输出格式。

提示:

提示:

关于格式字符串、print、printf和println方法的使用请参考中的相关内容。

println方法会在输出数据后添加一个换行符号。

print、printf和format方法不自动添加换行符号,可在输出数据中包含换行符号来实现换行。

PrintStream对象将数据转换为字节流输出,PrintWriter对象将数据转换为字符流输出。

字符和字符串按照默认的本地字符集转换为字节。

可以在创建PrintStream或

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2