




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 涂层后处理工安全生产月专项考核试卷及答案
- 风电机组机械装调工会议决议执行考核试卷及答案
- 买姜井协议书
- 纳卡停火协议书
- 防渗墙工岗位标准化技术规程
- 公司验房师应急处置技术规程
- 2025租赁合同简化版范本
- 2026届河北省秦皇岛市抚宁区台营区数学七上期末检测模拟试题含解析
- 2025船舶租赁合同范文
- 2025合同模板股权转让合同(公司扩张使用详细条款)范本
- 冲孔灌注桩施工方案
- 高压输电线路维护保养方案
- 2025年物联网安装调试员(高级)技能鉴定考试题库
- 高一上册第三单元《永遇乐 京口北固亭怀古》
- 学校“1530”安全教育记录表(2024年秋季全学期)
- 2025年篮球比赛免责协议书模板
- 新入职教师法律法规培训
- 幼儿园护学岗职责
- 【MOOC】化学与社会-大连理工大学 中国大学慕课MOOC答案
- 2024年吉林省高职高专单招考试数学试题(含答案)
- 实习报告评分标准
评论
0/150
提交评论