JAVA第6章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章输入/输出流和文件郑莉JAVA语言程序设计2目录6.1输入/输出流6.2文件读写6.3本章小结46.1.1I/O流的概念I/O流(Input/Output)–在Java中将信息的输入与输出过程抽象为I/O流输入是指数据流入程序输出是指数据从程序流出–一个流就是一个从源流向目的地的数据序列–IO流类一旦被创建就会自动打开–通过调用close方法,可以显式关闭任何一个流,如果流对象不再被引用,Java的垃圾回收机制也会隐式地关闭它输入/输出流5输入流–为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息输出流–当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个目标位置写信息6.1.1I/O流的概念(续)输入/输出流6对象源?目标?或两者?diskfilerunningprogrammonitorkeyboardInternetconnectionimagescannermouseBothBothDestinationSourceBothSourceSource输入/输出流6.1.1I/O流的概念(续)——源和目标的类型7不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据的方法大体上都是一样的:6.1.1I/O流的概念(续)——读写数据的方法读写打开一个流读信息关闭流打开一个流写信息关闭流输入/输出流86.1.2预定义的I/O流类概述输入/输出流可以从以下几个方面进行分类–从流的方向划分输入流输出流–从流的分工划分节点流处理流–从流的内容划分面向字符的流面向字节的流输入/输出流9面向字符的流:专门用于字符数据面向字节的流:用于一般目的6.1.2预定义的I/O流类概述(续)——java.io包的顶级层次结构输入/输出流10输入/输出流6.1.2预定义的I/O流类概述(续)——面向字符的流面向字符的流–针对字符数据的特点进行过优化,提供一些面向字符的有用特性–源或目标通常是文本文件11实现内部格式和文本文件中的外部格式之间转换–内部格式:16-bitchar数据类型–外部格式:UTF(UniversalcharactersetTransformationFormat):很多人称之为UniversalTextFormat包括ASCII码及非ASCII码字符,比如:斯拉夫(Cyrillic)字符,希腊字符,亚洲字符等6.1.2预定义的I/O流类概述(续)——面向字符的流输入/输出流12面向字符的抽象类——Reader和Writer–java.io包中所有字符流的抽象基类–Reader提供了输入字符的API–Writer提供了输出字符的API–它们的子类又可分为两大类节点流:从数据源读入数据或往目的地写出数据处理流:对数据执行某种处理–多数程序使用这两个抽象类的一系列子类来读入/写出文本信息例如FileReader/FileWriter用来读/写文本文件6.1.2预定义的I/O流类概述(续)——面向字符的流输入/输出流136.1.2预定义的I/O流类概述(续)——面向字符的流输入/输出流阴影部分为节点流14数据源或目标中含有非字符数据,必须用字节流来输入/输出通常被用来读写诸如图片、声音之类的二进制数据绝大多数数据是被存储为二进制文件的,世界上的文本文件大约只能占到2%,通常二进制文件要比含有相同数据量的文本文件小得多6.1.2预定义的I/O流类概述(续)——面向字节的流输入/输出流15InputStream和OutputStream–是用来处理8位字节流的抽象基类,程序使用这两个类的子类来读写8位的字节信息–分为两部分节点流处理流6.1.2预定义的I/O流类概述(续)——面向字节的流输入/输出流166.1.2预定义的I/O流类概述(续)——面向字节的流输入/输出流阴影部分为节点流17标准输入输出流对象–System类的静态成员变量–包括System.in:InputStream类型的,代表标准输入流,这个流是已经打开了的,默认状态对应于键盘输入。System.out:PrintStream类型的,代表标准输出流,默认状态对应于屏幕输出System.err:PrintStream类型的,代表标准错误信息输出流,默认状态对应于屏幕输出6.1.2预定义的I/O流类概述(续)——标准输入输出输入/输出流186.1.2预定义的I/O流类概述(续)——标准输入输出标准I/O重新导向–setIn(InputStream):设置标准输入流–setOut(PrintStream):设置标准输出流–setErr(PrintStream):设置标准错误输出流输入/输出流19从键盘读入信息并在显示器上显示importjava.io.*;publicclassEcho{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));Strings;while((s=in.readLine()).length()!=0)System.out.println(s);}}6.1.2预定义的I/O流类概述(续)——例6_1输入/输出流运行结果Hello!Hello!20System.in–程序启动时由Java系统自动创建的流对象,它是原始的字节流,不能直接从中读取字符,需要对其进行进一步的处理InputStreamReader(System.in)–以System.in为参数创建一个InputStreamReader流对象,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符BufferedReaderin–对InputStreamReader处理后的信息进行缓冲,以提高效率6.1.2预定义的I/O流类概述(续)——例6_1说明输入/输出流21JavaSE5.0新特性Java5.0终于也有了自己的printf!out.printf(“%-12sis%2dlong”,name,l);out.printf(“value=%2.2F”,value);–%n是平台无关的换行标志一个方便的扫描API:把文本转化成基本类型或者StringScanners=newScanner(System.in);intn=s.nextInt();–还有下列方法:next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShort()22重导向标准输入System.in和标准输出System.outimportjava.io.*;publicclassRedirecting{publicstaticvoidmain(String[]args)throwsIOException{BufferedInputStreamin=newBufferedInputStream(newFileInputStream(Redirecting.java));PrintStreamout=newPrintStream(newBufferedOutputStream(newFileOutputStream(test.out)));System.setIn(in);System.setOut(out);System.setErr(out);BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));Strings;while((s=br.readLine())!=null)System.out.println(s);out.close();//Rememberthis!}}6.1.2预定义的I/O流类概述(续)——Redirecting.java输入/输出流23处理流–不直接与数据源或目标相连,而是基于另一个流来构造–从流读写数据的同时对数据进行处理–例6-1中的InputStreamReader和BufferedReader都属于处理流InputStreamReader读取字节并转换为字符BufferedReader对另一个流产生的数据进行缓冲6.1.2预定义的I/O流类概述(续)——处理流输入/输出流24用一行表达式实现:BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));6.1.2预定义的I/O流类概述(续)——处理流输入/输出流25IO异常–多数IO方法在遇到错误时会抛出异常,因此调用这些方法时必须在方法头声明抛出IOException异常或者在try块中执行IO,然后捕获IOException6.1.2预定义的I/O流类概述(续)——I/O异常输入/输出流266.2文件读写写文本文件读文本文件写二进制文件读二进制文件File类处理压缩文件对象序列化随机文件读写276.2.1写文本文件本节知识点–FileWriter类–创建一个磁盘文件–关闭一个磁盘文件–write()方法–捕获I/O异常–BufferedWriter类文件读写28在C盘根目录创建文本文件Hello.txt,并往里写入若干行文本importjava.io.*;classEx6_2{publicstaticvoidmain(String[]args)throwsIOException{//main方法中声明抛出IO异常StringfileName=C:\\Hello.txt;FileWriterwriter=newFileWriter(fileName);writer.write(Hello!\n);writer.write(Thisismyfirsttextfile,\n);writer.write(Youcanseehowthisisdone.\n);writer.write(输入一行中文也可以\n);writer.close();}}6.2.1写文本文件(续)——例6_2文件读写29打开C盘根目录下的Hello.txt文件换行有些问题,例6_4中将解决这个问题6.2.1写文本文件(续)——例6_2运行结果文件读写306.2.1写文本文件(续)——例6_2说明每次运行这个程序,都将删除已经存在的”Hello.txt”文件,创建一个新的同名文件FileWriter的构造方法有五个,本例是通过一个字符串指定文件名来创建FileWriter类的write方法向文件中写入字符31Writer类的流可实现内部格式到外部磁盘文件格式的转换–“Hello.txt”是一个普通的ASCII码文本文件,每个英文字符占一个字节,中文字符占两个字节–Java程序中的字符串则是每个字符占两个字节的,采用Unicode编码close方法清空流里的内容并关闭它。如果不调用该方法,可能系统还没有完成所有数据的写操作,程序就结束了6.2.1写文本文件(续)——例6_2说明(续)文件读写32处理IO异常importjava.io.*;classEx6_3{publicstaticvoidmain(String[]args){StringfileName=c:\\Hello.txt;try{//将所有IO操作放入try块中FileWriterwriter=newFileWriter(fileName,true);writer.write(Hello!\n);writer.write(Thisismyfirsttextfile,\n);writer.write(Youcanseehowthisisdone.\n);writer.write(输入一行中文也可以\n);writer.close();}catch(IOExceptioniox){System.out.pri

1 / 114
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功