《java程序设计-韩晓红》第9章 输入输出和文件操作_第1页
《java程序设计-韩晓红》第9章 输入输出和文件操作_第2页
《java程序设计-韩晓红》第9章 输入输出和文件操作_第3页
《java程序设计-韩晓红》第9章 输入输出和文件操作_第4页
《java程序设计-韩晓红》第9章 输入输出和文件操作_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第9章输入/输出和文件操作本章主要内容:·输入、输出和流的基本概念·流的分类和流类的层次结构·节点流和过滤流的使用编辑ppt9.1流的基本概念

·

输出:在程序设计中,将程序处理得到的数据输出到控制台(显示器)或保存在文件中或传送到其它的计算机上

·

输入:程序从键盘、文件或其它的计算机上获取数据编辑ppt9.1.1流式输入/输出(流式I/O)流:一个有序的字节序列

流中的字节具有严格的顺序,按先进先

出要求操作,因此流式I/O是一种顺序方式输入流:从某种数据源(如键盘、磁盘文件、网络等)到程序的一个流,程序可以从这个流中读取数据输出流:从程序到某种目的地(如键盘、磁盘文件、网络等)的一个流,程序可以将信息写入到这个流流是有方向的一个程序可以同时处理多个输入流和输出流一个流不能既是输入流又是输出流

9.1流的基本概念编辑ppt·标准输入流:System.in·标准输出流:System.out9.1流的基本概念编辑ppt9.1.2字节流与字符流字节流:面向字节的流,流中的数据以8位字节为单位进行读写,是抽象类InputStream和OutputStream的子类。通常用于读写二进制数据,如图像和声音。其中InputStream和OutputStream是抽象类,它们分别为字节输入和输出操作定义了方法,它们的子类重载或覆盖了这些方法。9.1流的基本概念编辑pptInputStreamByteArrayInputStreamFileInputStreamFilterInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamBufferedInputStreamDataInputStreamLineNumberInputStreamPushbackInputStreamStringBufferInputStreameam图9.1输入字节流类层次结构图OutputStreamByteArrayOutputStreamFileOutputStreamFilterOutputStreamObjectOutputStreamPipedOutputStreamBufferedOutputStreamDataOutputStreamPrintStream图9.2输出字节流类层次结构图9.1流的基本概念编辑ppt字符流是面向字符的流,流中的数据以16位字符为单位进行读写。这里要特别注意,为满足字符的国际化表示要求,Java的字符编码是采用16位表示一个字符的Unicode码,而普通的文本文件中采用的是8位的ASCII码。字符流是抽象类Reader和Writer的子类。通常用于字符数据的处理。9.1流的基本概念编辑pptReaderBufferedReaderCharArrayReaderFilterReaderPushbackReaderInputStreamReaderPipedReaderStringReaderLineNumberReaderFileReader图9.3输入字符流类层次结构WriterBufferedWriterrCharArrayWriterFilterWriterOutputStreamWriterPipedWriterStringWriterFileWriter

图9.4输出字符流类层次结构图9.1流的基本概念编辑pptReader和Writer是抽象类,它们分别为字符输入和输出操作定义了方法,它们的子类重载或覆盖了这些方法。这些方法与InputStream和OutputStream类中定义的方法类似,只是读写的数据由8位byte数据变为16位char数据。9.1流的基本概念编辑ppt9.1.3节点流与处理流

节点流:流的一端是程序,另一端是节点的流,称为节点流。节点流是一种最基本的流。以其它已经存在的流作为一个端点的流,称为处理流。处理流又称过滤流,是对已存在的节点流或其它处理流的进一步处理。FilterInputStream和FilterOutputStream是典型的处理流。9.1流的基本概念2023/4/13编辑ppt

从流类的构造方法可以区分节点流和处理流。节点流构造方法的参数是节点数据源,而处理流构造方法总有一个其它流对象作参数。

例如:InputStreamis=newFileInputStream("data.dat");//构造方法参数是文件InputStreamReaderisr=newInputStreamReader(is);//构造方法参数是流对象BufferedReaderbr=newBufferedReader(isr);//构造方法参数是流对象9.1流的基本概念编辑ppt

节点流在程序中一般不单独使用,而是通过过滤流将多个流套接在一起,利用各种流的特性共同处理数据。套接的多个流形成一个流链。

同样,也可以构造一个输出流链。

程序可以根据对外界输入/输出数据的需要构造相应的I/O流链,以方便数据的处理并提高程序效率数据源(data.dat)InputStreamisInputStreamReaderisrBufferedReaderbr程序图9.5输入流链示意图9.1流的基本概念编辑ppt9.2常用I/O流的使用程序中使用流对象输入输出数据操作过程如下:⑴新建流对象并实例化;⑵对流进行读写操作;⑶关闭流。2023/4/13编辑ppt9.2.1文件I/O流的使用文件I/O流是程序中最常用的节点流。包括字节流FileInputStream和FileOutputStream以及字符流Reader和Writer。使用文件流可以对文件系统中的文件内容进行读写操作。9.2常用I/O流的使用2023/4/13编辑ppt1.FileInputStream类和FileOutputStream类的常用构造方法【例9-1】将字节数据写入到一个磁盘文件中,然后再将文件的内容读出来并显示。importjava.io.*;public

classEx9_1_FileInputOutputStream{

public

static

voidmain(String[]args)throwsIOException{ FileOutputStreamfos; fos=newFileOutputStream(".\\filestream.dat");//打开文件输出流

byte[]array={1,3,5,7,9,11,13,15,17,19};

for(inti=0;i<array.length;i++) fos.write(array[i]);//写数据到文件输出流,也就是写入文件 fos.close();//关闭文件输出流,即关闭文件 FileInputStreamfis; fis=newFileInputStream(".\\filestreamtest.dat");//打开文件输入流

intvalue;

while((value=fis.read())!=-1)//从文件输入流读数据,也就是从文件读 System.out.print(value+""); fis.close();//关闭文件输入流,即关闭文件 }}编辑ppt2.FileReader类和FileWriter类的常用构造方法【例9-2】将文本数据写入到一个磁盘文本文件中,然后再将文件的内容读出来并显示。importjava.io.*;public

classEx9_2_FileReaderWriterStream{

public

static

voidmain(String[]args)throwsIOException{ FileWriterfw; fw=newFileWriter(".\\filestream.txt");//打开文件输出流

chararray[]={'文','本','输','入','输','出','实','例','。'};

for(inti=0;i<array.length;i++) fw.write(array[i]);//写数据到文件输出流,也就是写入文件 fw.close();//关闭文件输出流,即关闭文件 FileReaderfr; fr=newFileReader(".\\filestream.txt");//打开文件输入流

intvalue;

while((value=fr.read())!=-1)//从文件输入流读数据 System.out.print((char)value); fr.close();//关闭文件输入流,即关闭文件 }}编辑ppt【例9-3】向一个已有文件(例9-3中建立的文件filestream.txt)中追加写入新的数据,写入的新数据为:“WelcometoJava!”。然后再将文件的内容读出来并显示。importjava.io.*;public

classEx9_3_FileAppendStream{

public

static

voidmain(String[]args)throwsIOException{ Stringstr="WelcomtoJava!"; FileWriterfw; fw=newFileWriter(".\\filestream.txt",true);//打开输出流

fw.write(str);//写字符串到文件输出流

fw.close();//关闭文件输出流

FileReaderfr; fr=newFileReader(".\\filestream.txt");//打开输入流

intvalue;

while((value=fr.read())!=-1)//从文件输入流读数据

System.out.print((char)value); fr.close();//关闭文件输入流

}}9.2常用I/O流的使用编辑ppt要特别注意,InputStreamReader是字节流通向字符流的桥梁,它使用指定(或默认)的字符集读取字节并将其解码为字符;OutputStreamWriter是字符流通向字节流的桥梁,可使用指定(或默认)的字符集将要写入流中的字符编码成字节。InputStreamReader和OutputStreamWriter的常用构造方法如下,其它的方法可查看JDKAPI文档。publicInputStreamReader(InputStreamin)创建一个使用默认字符集的输入字符流。publicOutputStreamWriter(OutputStreamout)创建使用默认字符集的输出字符流。9.2常用I/O流的使用2023/4/13编辑ppt9.2.2缓冲流的使用设置缓冲是一种I/O操作的增强技术。在对流进行读写操作时,使用一块称作缓冲区的内存区域,输出的数据先存入缓冲区,当缓冲区满了或调用缓冲流的flush()后,才完成对输出设备或文件的实际输出;输入数据时,从输入设备或文件每次读入尽可能多的数据到缓冲区,程序需要的数据从缓冲区取得,当缓冲区变空时再读入一个数据块。这样可以减少对物理设备的读写次数,从而提高程序的读写性能。缓冲流包括BufferedInputStream和BufferedOutputStream以及BufferedReader和BufferedWriter。它们都是处理流,在创建其具体的流实例时,需要给出一个InputStream或OutputStream或Reader或Writer流作为前端流。9.2常用I/O流的使用2023/4/13编辑ppt【例9-4】从键盘循环输入文本行,保存到磁盘文本文件“buffer.txt”中,直到输入“end”为止。然后再将文件的内容读出来并显示。importjava.io.*;public

classEx9_4_BuffereStream{

public

static

voidmain(String[]args)throwsIOException{ InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); FileWriterfout=newFileWriter(".\\buffer.txt");//打开文本文件写 BufferedWriterbout=newBufferedWriter(fout);//字符流转换为缓冲流

9.2常用I/O流的使用2023/4/13编辑pptStringstr;

while(true){ str=br.readLine();//从键盘读一行字符

if(str.equals("end"))

break; bout.write(str);//将读入的字符写入文件中 bout.newLine();//写行分隔符到文件中 } bout.close();//关闭文件 FileReaderfin=newFileReader(".\\buffer.txt");//打开文本文件读 BufferedReaderbin=newBufferedReader(fin);//字符流转换为缓冲流

while((str=bin.readLine())!=null)//从文件中读一行字符 System.out.println(str);//显式 bin.close(); }}9.2常用I/O流的使用2023/4/13编辑ppt利用InputStreamReader类和OutputStreamWriter类可以实现需要读写的字节和字符之间的转换。请修改例9-4中的程序,将键盘输入的文本行写入一个字节文件中,再从字节文件读取文本行并显式。修改如下:将例9-4程序中的语句:FileWriterfout=newFileWriter(".\\buffer.txt");

//打开字符文件写改写为以下两行:OutputStreamos=newFileOutputStream(".\\buffer.bin");//打开字节文件写OutputStreamWriterfout=newOutputStreamWriter(os);//字节流转换为字符流就可以将程序中的字符写入到字节文件中。类似,将9-4程序中的语句:FileReaderfin=newFileReader(".\\buffer.txt");//打开文本文件读改写为以下两行:InputStreamis=newFileInputStream(".\\buffer.bin");//打开字节文件读InputStreamReaderfin=newInputStreamReader(is);//字节流转换为字符流就能从字节文件中读取字符。9.2常用I/O流的使用2023/4/13编辑ppt9.3文本扫描器(Scanner)Scanner类是java工具包util中的类,主要功能是文本扫描。从一个文本字符串或文件中获取各种不同类型的数据,数据之间用分隔符分隔;分隔符(又称为分隔符模式)可以是默认的空白(空格、Tab、回车、换行等)字符,也可以是其它指定的字符或字符串。

这个类最实用的地方表现在能从控制台读取不同类型的输入数据。2023/4/13编辑pptScanner类常用的构造方法⑴publicScanner(Stringsource)构造一个新的Scanner对象,从指定的字符串数据源获取数据。⑵publicScanner(Filesource)throwsFileNotFoundException构造一个新的Scanner对象,从File对象指定的文件数据源获取数据。⑶publicScanner(InputStreamsource)构造一个新的Scanner对象,从指定的输入流数据源获取数据。9.5文本扫描器(Scanner)编辑pptScanner类常用的方法⑴publicStringnext()以字符串类型返回下一个输入数据项⑵publicStringnextLine()以字符串类型返回当前行剩余的所有输入数据项⑶publicbooleannextBoolean()⑷publicdoublenextDouble()⑸publicfloatnextFloat()⑹publicintnextInt()⑺publiclongnextLong()⑻publicshortnextShort()方法⑶~⑻以指定的类型返回下一个输入数据项。如果下一个数据项与指定的类型不一致(或不兼容),将抛出InputMismatchException异常。⑼publicbooleanhasNext()如果在扫描的数据源中还有输入数据项,返回true,否则返回false。⑽publicScanneruseDelimiter(Stringpattern)设置Scanner对象(数据源中各数据项之间)的分隔符模式。9.5文本扫描器(Scanner)2023/4/13编辑ppt【例9-14】使用空白分隔符和指定分隔符。importjava.util.Scanner;public

classEx9_14_ScannerDelimiter{

public

static

voidmain(String[]args){Scanners=newScanner("abcdefghijkl..mnop,qrstuvwxyz");//s.useDelimiter("|,|\\.");//设置分隔符为空格或逗号或句点

while(s.hasNext()){System.out.println(s.next());} }}9.5文本扫描器(Scanner)编辑ppt【例9-15】从一个指定的字符串中读取基本类型数据。importjava.util.Scanner;public

classEx9_15_ScannerData{

public

static

voidmain(String[]args){ Scanners=newScanner("1233.1415trueabcdef"); System.out.println(s.nextInt());//从s中读一个整数输出 System.out.println(s.nextFloat());//从s中读一个浮点数输出 System.out.println(s.nextBoolean());//从s中读一个布尔数据输出 System.out.println(s.next());//从s中读一个字符串

温馨提示

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

最新文档

评论

0/150

提交评论