《Java程序设计基础》第14章 实现流_第1页
《Java程序设计基础》第14章 实现流_第2页
《Java程序设计基础》第14章 实现流_第3页
《Java程序设计基础》第14章 实现流_第4页
《Java程序设计基础》第14章 实现流_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第14章实现流主讲:XXX复习提问1、什么是监听器?有什么作用?2、什么是适配器?有什么作用?3、监听器和适配器有什么不同?4、图形界面中常用组件有哪些?本章提要主要知识点:流的分类;主要流类的功能与用法;文件流的处理

学习目标:熟悉流的基本功能,掌握主要流类的用法,能够运用流进行输入输出操作和文件的处理。14.1识别流的类型JAVA程序的输入输出功能通过流Stream实现的。流是指一组有顺序的、有起点和终点的字节结合,如文件、网络。java.io系统包提供了一套完整的流类,能够进行基本的IO操作和复杂的文件处理以及网络功能。Java中的流按照处理数据的单位可以分为两种:字节流和字符流,分别用4个抽象类来表示:InputStream、OutputStream、Reader、Writer,其中InputStream和Reader用于读操作,OutputStream

和Writer用于写操作,Java中的许多其它流类都是它们的子类。如果需要进行流操作,应在程序首部加上语句:importjava.io.*;14.1识别流的类型按照对流中数据的处理方式,流又可以分为文本流和二进制流,文本流是一个字符序列,能够按照需要进行某些字符的转换,被读写的字符和外部设备之间不存在一一对应的关系,被读写的字符个数与外部设备中的字符个数不一定相等,如标准输出流System.out就是文本流,不同类型的数据经过转换后输出到标准输出设备(显示器)。而二进制流则在读写过程中不要转换,外部设备中的字节或字符与被读写的字节或字符完全对应。14.1识别流的类型文件不仅表示磁盘文件,也包括设备,如键盘、显示器、打印机,对它们的操作也是通过流完成的,通过建立流与特定文件的联系,可以从文件中读出字节,保存到数组或者使用输出流写入文件,外部设备中的字节或字符与被读写的字节或字符完全对应。

14.1识别流的类型14.1.1InputStream类

InputStream是基本的输入流类,是一个抽象类,它定义了输入流类共同的特性,该类中的所有方法在遇到错误时都会引发IOExcetion异常,所以一般在定义方法时都会在后面加上throwsIOExcetion子句。

InputStream类是一个抽象类,不能直接实例化,程序中使用的是它的子类对象,但有些子类不支持其中的一些方法,如skip,mark,reset。常用方法有:14.1识别流的类型intread()

//返回下一个输入字节的整形表示,-1表示遇到流的末尾(结束)int

read(byte[]b)//读入b.length个字节到数组b并返回实际读入的字节数int

read(byte[]b,int

off,int

len)//读入流中的数据到数组b,保存在off开始的长度为len的数组元素中longskip(longn)//跳过输入流上的n个字节并返回实际跳过的字节数int

avaiable()//返回当前输入流中可读的字节数voidmark(int

readlimit)//在输入流的当前放置一个标志,表示允许最多读入readlimit个字节voidreset()//把输入指针返回以前所做的标志处(复位)boolean

markSupported()是否支持mark/reset操作voidclose()//关闭流操作,释放相应资源14.1识别流的类型14.1.2OutputStream类

OutputStream是基本的输出流类,与InputStream对应,它定义了输出流类共同的特性,定义和使用与InputStream类似,但它的所有方法都是void返回类型。常用方法:voidwrited(intb)//将一个字节写入流,也可以使用表达式voidwrited(byte[]b)//将一个字节数组写入输出流voidwrited(byte[]b,int

off,int

len)//将字节数组的从off开始的len个字节写入输出流voidflush()//彻底完成输出并清空缓冲区voidclose()//关闭输出流,释放资源java.util.Scanner类Scanner使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的next方法将得到的标记转换为不同类型的值。例如,以下代码使用户能够从System.in

中读取一个数:Scannersc=newScanner(System.in);

inti=sc.nextInt();

以下代码使long类型可以通过myNumbers

文件中的项分配:Scannersc=newScanner(new

File("myNumbers"));while(sc.hasNextLong()){longaLong=sc.nextLong();}java.util.Scanner类扫描器还可以使用不同于空白的分隔符。下面是从一个字符串读取若干项的例子:Stringinput="1fish2fishredfishbluefish";Scanners=newScanner(input).useDelimiter("\\s*fish\\s*");System.out.println(s.nextInt());System.out.println(s.nextInt());System.out.println(s.next());System.out.println(s.next());

s.close();输出为:12redblue

java.util.Scanner类构造方法

:Scanner(Filesource)//构造一个新的Scanner,它生成的值是从指定文件扫描的。Scanner(Filesource,StringcharsetName)//构造一个新的Scanner,它生成的值是从指定文件扫描的。Scanner(InputStreamsource)//构造一个新的Scanner,它生成的值是从指定的输入流扫描的。Scanner(InputStreamsource,StringcharsetName)//构造一个新的Scanner,它生成的值是从指定的输入流扫描的Scanner(Stringsource)//构造一个新的Scanner,它生成的值是从指定字符串扫描的。

java.util.Scanner类主要方法

:voidclose()//关闭此扫描器boolean

hasNext()//如果此扫描器的输入中有另一个标记,则返回true。boolean

hasNextInt()//如果通过使用nextInt()方法,此扫描器输入信息中的下一个标记可以解释为默认基数中的一个int

值,则返回true。boolean

hasNextLine()//如果在此扫描器的输入中存在另一行,则返回true。int

nextInt()//将输入信息的下一个标记扫描为一个int。boolean

nextBoolean()//扫描解释为一个布尔值的输入标记并返回该值。流输入输出应用举例例1:输入3个学生的学号、姓名、成绩,求出总分和平均分.importjava.util.Scanner;publicclassScoreSum{publicstaticvoidmain(String[]args){

intno1,no2,no3; Stringname1,name2,name3; floatscore1,score2,score3; floattotal,average; Scannerscan=newScanner(System.in);

System.out.print("请输入第1个学生的学号、姓名、成绩:"); no1=scan.nextInt(); name1=scan.next(); score1=scan.nextFloat();流输入输出应用举例

System.out.print("请输入第2个学生的学号、姓名、成绩:"); no2=scan.nextInt();name2=scan.next(); score2=scan.nextFloat();

System.out.print("请输入第3个学生的学号、姓名、成绩:"); no3=scan.nextInt();name3=scan.next(); score3=scan.nextFloat(); total=score1+score2+score3; average=total/3;

System.out.println("学生成绩表");

System.out.println("====================");

System.out.println("学号姓名成绩"); System.out.println(no1+""+name1+""+score1); System.out.println(no2+""+name2+""+score2); System.out.println(no3+""+name3+""+score3);

System.out.println("====================");

System.out.println("学生成绩总分:"+total+",平均分:"+average); }}14.1识别流的类型14.1.3PrintStream类打印流,用于打印输出,常用的标准打印输出对象System.out就是PrintStream类的实例对象。PrintStream类可以使用OutputStream类定义的所有方法,还包括print和println方法,能够将不同类型的数据转换成字符串输出,println方法在输出当前内容后会换行,而print方法不会换行。构造方法是:printStream(OutputStreamout)printStream(OutputStream

out,boolean

autoflush)//输出后要不要自动清空缓冲区printStream(OutputStream

out,boolean

autoflush,Stringencoding)//Autoflush表示遇到回行符\n是否需要清空缓冲区,Encoding表示编码方式14.1识别流的类型主要方法:voidwrited(intb)voidwrited(byte[]b)voidwrited(byte[]b,int

off,int

len)voidflush()voidclose()voidprint(Object

obj)或voidprintln(Object

obj)voidprint(Strings)或voidprintln(Strings)voidprint(char

ch[])或voidprintln(char

ch[])voidprint(charc)或voidprintln(charc)voidprint(inti)或voidprintln(inti)voidprint(longl)或voidprintln(longl)voidprint(floatf)或voidprintln(floatf)voidprint(doubled)或voidprintln(doubled)voidprint(booleanb)或voidprintln(booleanb)voidprintln()//仅仅输出一个换行符

14.1.5InputStreamReader和OutputStreamWriter类InputStreamReader类和OutputStreamWriter类是Reader和Writer的子类,提供从字节流到字符流的转换,InputStream类和OutputStream类处理的是字节流,在读写双字节的中文信息时可能出现错误,利用Reader和Writer类处理就能够解决这个问题。14.1.5InputStreamReader和OutputStreamWriter类构造方法:InputStreamReader(InputStreamin)InputStreamReader(InputStream

in,String

charsetName)InputStreamReader(InputStream

in,Charset

cs)InputStreamReader(InputStream

in,CharsetDecoder

dec)CharsetName是字符集名,Charset是字符集,CharsetDecoder是字符编码集。InputStreamReader和OutputStreamWriter类提供的方法与InputStream以及OutputStream相似,只是以字符为单位进行读写操作。14.1.6BufferInputStream类和BufferOutputWriter类BufferInputStream类和BufferOutputWriter类允许I/O一次读取多个字节,提高系统性能,可以使用skip/reset/mark方法

1、BufferInputStream类可以对任何InputStream进行带缓冲区的封装2、BufferedOutputStream类向BufferedOutputStream输出和向OutputStream输出完全相同,只不过BufferedOutputStream中有一个强制输出缓冲区数据的方法flush

14.1.6BufferInputStream类和BufferOutputWriter类BufferInputStream类的构造方法是:BufferInputStream(InputStreamin)//构造一个带32B缓冲区的缓冲流。BufferInputStream(InputStream

in,intsize)//构造一个指定大小缓冲区的缓冲流。

14.1.6BufferInputStream类和BufferOutputWriter类2、BufferedOutputStream类向BufferedOutputStream输出和向OutputStream输出完全相同,只不过BufferedOutputStream中有一个强制输出缓冲区数据的方法flush,构造方法是:BufferedOutputStream(OutputStreamin)//构造一个带32B缓冲区的缓冲流。BufferedOutputStream(OutputStream

in,intsize)//构造一个指定大小缓冲区的缓冲流。流输入输出应用举例例2:将键盘输入的信息显示到屏幕上。importjava.io.*;publicclassCharInput{publicstaticvoidmain(String

args[])throwsIOException{Strings;

InputStreamReader

ir;

BufferedReaderin;//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

ir=newInputStreamReader(System.in);in=newBufferedReader(ir);//可以与上一句合并为一句

while((s=in.readLine())!=null){

System.out.println("Read:"+s);}}}流输入输出应用举例例3:将键盘输入10个数,求平均值。importjava.io.*; publicclassAverage{publicstaticvoidmain(String

args[]){inti,n=10,s=0;floataver;try{for(i=1;i<=n;i++){BufferedReader

br=newBufferedReader(new

InputStreamReader(System.in));s=s+Integer.parseInt(br.readLine());}}catch(IOExceptione){}aver=s/10f;System.out.println("这10个数的平均值是:"+aver);}}14.2应用文件流14.2.1File类

File类是IO包中唯一能够代表磁盘文件本身的对象,

File类定义了一些与平台无关的方法进行文件操作,如建立、删除、查询、重命名等。目录也是文件,功能更多,可列表,用\(在Windows环境下)或/(在UNIX及Linux环境下)分隔目录名。对文件进行处理后,可利用资源管理器查看。如:FilemyFile=newFile("myfilename");14.2应用文件流1、File类的常用方法StringgetName()//获取文件名StringgetPath()//获取文件路径StringgetAbsolutePath()//获取文件绝对路径StringgetParent()//获取父目录名称BooleanrenameTo(File

newName)//改名是否成功Booleanexists()//文件是否存在BooleancanWrite()//文件是否可写BooleancanRead()//文件是否可读BooleanisFile()//是否是文件BooleanisDirectory()//是否是目录BooleanisAbsolute()//是否是绝对路径longlastModified()//文件最后修改的时间longlength()//文件长度Booleandelete()//删除文件

14.2应用文件流2、目录操作方法boolean

mkdir()//建立目录boolean

mkdirs()//可建立多个层次的目录String[]list()//列出符合条件的文件名3、应用举例例4:判断C盘根目录下指定的文件1.txt是否存在,若存在显示其相关信息,否则显示文件不存在的提示。

14.2应用文件流14.2.2FileInputStream类和FileOutputStream类文件输入输出类,用于完成磁盘文件的读写操作。在创建一个FileInputStream对象时通过构造函数指定文件名和路径,而创建一个FileOutputStream对象时,如果文件存在,则覆盖它。常用构造方法:FileInputStream(String

fileName)FileInputStream(Filefile)例:下面两种方法均可建立文件对象。方法一:FileInputStream

inOne=newFileInputStream("helloworld.txt");方法二:Filef=newFile("helloworld.txt");FileInputStream

inTwo=newFileInputStream(f);14.2应用文件流FileOutputStream类的构造方法和FileInputStream类相似,主要有2个:FileOutputStream(String

file

温馨提示

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

评论

0/150

提交评论