




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/11/19,第1页,注意:开始用功了!,2019/11/19,第2页,配合例子源代码一起使用,Powerpoint制作:耿祥义张跃平,输入、输出流,Java程序设计教学做一体化教程第7章,2019/11/19,第3页,主要内容,2019/11/19,第4页,7.1File类7.1.1核心知识_1,1构造方法File类在java.io包中,程序使用File的对象来获取文件本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等。File类的构造方法有三个:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filedir,Stringfilename);其中,filename是文件名字,directoryPath是文件的路径,dir为一个目录。使用File(Stringfilename)创建文件时,该文件被认为与当前应用程序在同一目录中。,2019/11/19,第5页,7.1.1核心知识_2,2File类的常用方法publicStringgetName()获取文件的名字。publicbooleancanRead()判断文件是否是可读的。publicbooleancanWrite()判断文件是否可被写入。publicbooleanexits()判断文件是否存在。publiclonglength()获取文件的长度(单位是字节)。publicStringgetAbsolutePath()获取文件的绝对路径。publicStringgetParent()获取文件的父目录。publicbooleanisFile()判断文件是否是一个普通文件,而不是目录。publicbooleanisDirectroy()判断文件是否是一个目录。publicbooleanisHidden()判断文件是否是隐藏文件。publiclonglastModified()获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数)。更多方法见page140.,2019/11/19,第6页,7.1.2能力目标,掌握File类的常用方法。,2019/11/19,第7页,7.1.3任务驱动,将下列Application7_1.java中的【代码】替换为程序代码。程序运行效果如图7.1。,2019/11/19,第8页,任务小结,(1)使用File类创建一个文件对象后,例如Filefile=newFile(c:myletter,letter.txt);如果c:myletter目录中没有名字为letter.txt文件,文件对象file调用方法:publicbooleancreateNewFile();可以在c:myletter目录中建立一个名字为letter.txt的文件。(2)文件对象调用方法publicbooleandelete()可以删除当前文件,例如:file.delete();,2019/11/19,第9页,7.1.4实践环节,上机调试下列程序,并注意Runtime对象是怎样运行windows平台上的记事本程序和浏览器程序的。Appilcation7_2.java,2019/11/19,第10页,7.2文件字节输入流7.2.1核心知识_1,FileInputStream类的对象称为文件字节输入流,文件字节输入流以字节为单位读取文件中的内容。1创建指向文件的字节输入流使用FileInputStream类的下列构造方法创建指向文件的输入流。FileInputStream(Stringname);FileInputStream(Filefile);程序必须在try-catch语句中的try块部分创建输入流、在catch(捕获)块部分检测并处理这个异常。例如,为了读取一个名为hello.txt的文件,建立一个文件字节输入流in:,或Filef=newFile(hello.txt);tryFileInputStreamin=newFileInputStream(f);catch(IOExceptione)System.out.println(Filereaderror:+e);,tryFileInputStreamin=newFileInputStream(hello.txt);catch(IOExceptione)System.out.println(Filereaderror:+e);,2019/11/19,第11页,7.2.1核心知识_2,2以字节为单位读文件文件字节流可以调用从父类(InputStream)继承的read方法顺序地、以字节为单位读取文件,只要不关闭流,每次调用read方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭。intread()输入流调用该方法从源中读取单个字节的数据,该方法返回字节值(0255之间的一个整数),如果未读出字节就返回-1。intread(byteb)输入流调用该方法从源中试图读取b.length个字节到字节数组b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。intread(byteb,intoff,intlen)输入流调用该方法从源中试图读取len个字节到字节数组b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。例如,如果文件字节输入流in指向的文件的内容是appleisverygood,那么in首次调用read()方法:intm=in.read();将读取文件中的第一个字节,即读取到字母a,并返回字母a的字节值(97),即m的值是97。,2019/11/19,第12页,7.2.1核心知识_3,3关闭流输入流都提供了关闭方法close(),尽管程序结束时会自动关闭所有打开的流,但是当程序使用完流后,显式地关闭任何打开的流仍是一个良好的习惯。如果没有关闭那些被打开的流,那么就可能不允许另一个程序操作这些流所用的资源。,2019/11/19,第13页,7.2.2能力目标,使用文件字节输入流读取文件。,2019/11/19,第14页,7.2.3任务驱动,将下列Application7_3.java中的【代码】替换为程序代码。程序运行效果如图7.2。,2019/11/19,第15页,任务小结,程序在运行期间,可能需要从外部的存储媒介或其他程序中读入所需要的数据,这就需要使用输入流。输入流的指向称为它的源,程序通过输入流读取源中的数据。比如,程序需要读取文件,那么就可以使用FileInputStream建立一个和文件相连接的文件字节输入流,如图7.3所示。,使用输入流通常包括4个基本步骤:(1)设定输入流的源,比如磁盘上的文件。(2)创建指向源的输入流(3)让输入流读取源中的数据(4)关闭输入流。,2019/11/19,第16页,7.3文件字节输出流7.3.1核心知识_1,FileOutputStream类的对象称为文件字节输出流,文件字节输出流以字节为单位向文件写入数据,即以字节为单位写文件。1创建指向文件的文件字节输出流可以使用FileOutputStream类的下列具有刷新功能的构造方法创建指向文件的输出流。FileOutputStream(Stringname);FileOutputStream(Filefile);需要特别注意的是,如果输出流指向的文件不存在,Java就会创建该文件,如果执向的文件是已存在的文件,输出流将刷新该文件。可以使用FileOutputStream类的下列能选择是否具有刷新功能的构造方法创建指向文件的输出流。FileOutputStream(Stringname,booleanappend);FileOutputStream(Filefile,booleanappend);,2019/11/19,第17页,7.3.1核心知识_2,2以字节为单位写文件文件字节流可以调用从父类继承的write方法顺序地写文件。FileOutStream流顺序地向文件写入内容,即只要不关闭流,每次调用write方法就顺序地向文件写入内容,直到流被关闭。voidwrite(intn)输出流调用该方法向文件写入单个字节。voidwrite(byteb)输出流调用该方法向文件写入一个字节数组。voidwrite(byteb,intoff,intlen)给定字节数组中起始于偏移量off处取len个字节写到文件。voidclose()关闭输出流。,2019/11/19,第18页,7.3.2能力目标,能使用文件字节输出流写文件。,2019/11/19,第19页,7.3.3任务驱动,将下列Application7_4.java中的【代码】替换为程序代码。程序运行效果如图7.4。,2019/11/19,第20页,任务小结,程序在处理数据后,要将处理的结果写入到永久的存储媒介中或传送给其他的应用程序,就需要使用输出流。输出流的指向称为它的目的地,程序通过输出流把数据传送到目的地。比如,程序需要将数据写入到文件,那么就可以使用FileOutputStream建立一个和文件相连接的文件字节输出流,如图7.5所示。,使用输出流通常包括4个基本步骤:(1)给出输出流的目的地,比磁盘上的文件(2)创建指向目的地的输出流(3)让输出流把数据写入到目的地(4)关闭输出流。,2019/11/19,第21页,7.3.4实践环节,上机调试程序,观察程序的运行结果。Application7_5.java,2019/11/19,第22页,7.4文件字符输入、输出流7.4.1核心知识,文件字节输入、输出流以字节为单位处理数据。因此,字节流不能很好地操作Unicode字符,比如,一个汉字在文件中占用2个字节,如果使用字节流,读取不当会出现“乱码”现象。与FileInputStream、FileOutputStream字节流相对应的是FileReader、FileWriter字符流,FileReader和FileWriter分别是Reader和Writer的子类,其构造方法分别是:FileReader(Stringfilename);FileReader(Filefilename);FileWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);字符输入流和输出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。,2019/11/19,第23页,7.4.2能力目标,使用文件字符输入、输出流读写文件。,2019/11/19,第24页,7.4.3任务驱动,将Application7_6.java中的【代码】替换为程序代码。程序运行效果如图7.6。,2019/11/19,第25页,任务小结,Writer字符流的write方法将数据首先写入到缓冲区,每当缓冲区溢出时,缓冲区的内容被自动写入到目的地,如果关闭流,缓冲区的内容会立刻被写入到目的地。流调用flush()方法可以立刻冲洗当前缓冲区,即将当前缓冲区的内容写入到目的地。因此,当使用字符输出流完成数据写入之后,一定要关闭输出流。,2019/11/19,第26页,7.5缓冲流7.5.1核心知识_1,如果按行读取文件的内容,那么在不清楚一行有多少个字符的情况下,FileReader流的read方法很难完成这样的任务。1BufferReader流BufferedReader流称为缓冲输入流,相对于FileReader流,缓冲输入流增强了读文件的能力。通过向BufferedReader传递一个Reader子类的对象(如FileReader的实例),来创建一个BufferedReader对象,如:FileReaderinOne=newFileReader(Student.txt)BufferedReaderinTwo=BufferedReader(inOne);上述代码可以通俗地理解成inTwo流和inOne流连接在了一起,那么inTwo流也就可以读取inOne流指向的文件了,比如inTwo流就具有readLine()方法(按行读取文件),例如:StringstrLine=inTwo.readLine();,2019/11/19,第27页,7.5.1核心知识_2,2BufferWriter流BufferedWriter流称为缓冲输入流,相对于FileWriter流,缓冲输出流增强了写文件的能力。可以将BufferedWriter流和FileWriter流连接在一起,然后使用BufferedWriter流将数据写到目的地,例如:FileWritertofile=newFileWriter(hello.txt);BufferedWriterout=BufferedWriter(tofile);然后out使用BufferedReader类的方法write(Strings,intoff,intlen)把字符串s写到hello.txt中,参数off是s开始处的偏移量,len是写入的字符数量。另外,BufferedWriter流有一个独特的向文件写入一个回行符的方法:newLine();,2019/11/19,第28页,7.5.2能力目标,使用缓冲流读写文件。,2019/11/19,第29页,7.5.3任务驱动,将下列Application7_7.java中的【代码】替换为程序代码。english.txt程序运行效果如图7.7。,2019/11/19,第30页,任务小结,可以把BufferedReader和BufferedWriter称为上层流,把它们指向的字符流称为底层流。底层字符输入流首先将数据读入缓存,BufferedReader流再从缓存读取数据;BufferedWriter流将数据写入缓存,底层字符输出流会不断地将缓存中的数据写入到目的地。当BufferedWriter流调用flush()刷新缓存或调用close()方法关闭时,即使缓存没有溢满,底层流也会立刻将缓存的内容写入目的地。关闭输出流时要首先关闭缓冲输出流,然后关闭缓冲输出流指向的流。在编写代码时只需关闭上层流,那么上层流的底层流将自动关闭。,2019/11/19,第31页,7.5.4实践环节,test.txt是一套标准化考试的试题文件。下面的代码每次读取试题文件中的一道题目,并等待用户回答,用户做完全部题目后,程序给出用户的得分。调试下列代码,并注意程序是怎样使用输入流读取试题文件的,程序效果如图7.8。Application7_8.javaStandardExam.java,2019/11/19,第32页,7.6随机流7.6.1核心知识_1,1RandomAccessFile类RandomAccessFile类创建的流称作随机流,RandomAccessFile流的指向既可以作为源、也可以作为目的地。简单地说,使用RandomAccessFile流不仅能读文件,也可以写文件。以下是RandomAccessFile类的两个构造方法。RandomAccessFile(Stringname,Stringmode)参数name用来确定一个文件名,给出创建的流的源,也是流目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权利。RandomAccessFile(Filefile,Stringmode)参数file是一个File对象,给出创建的流的源,也是流目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权利。,2019/11/19,第33页,7.6.1核心知识_2,2常用方法RandomAccessFile类中有一个方法seek(longa),用来定位RandomAccessFile流的读写位置,其中参数a确定读写位置距离文件开头的字节个数。调用getFilePointer()方法获取流的当前读写位置。RondomAccessFile流的readLine()方法按行读取文件,但在读取含有非ASCII字符的文件时会出现“乱码”现象,因此,需要把readLine()读取的字符串用“iso-8859-1”编码重新编码存放到byte数组中,然后再用当前机器的默认编码将该数组转化为字符串,操作如下:(1)读取Stringstr=in.readLine();(2)用“iso-8859-1”重新编码byteb=str.getBytes(iso-8859-1);(3)使用当前机器的默认编码将字节数组转化为字符串Stringcontent=newString(b);,2019/11/19,第34页,7.6.2能力目标,能使用RondomAccessFile流读取文件。,2019/11/19,第35页,7.6.3任务驱动,将下列Application7_9.java中的【代码】替换为程序代码。程序运行效果如图7.9。,2019/11/19,第36页,任务小结,与前面的输入、输出流不同的是,RandomAccessFile类既不是InputStream类的子类,也不是OutputStram类的子类。当准备对一个文件进行读写操作时,可以创建一个指向该文件的随机流,可以从这个随机流读取文件的数据,也可以通过这个随机流写数据到文件。另外,随机流指向文件时,不刷新文件。,2019/11/19,第37页,表7.1RandomAccessFile类的常用方法,2019/11/19,第38页,7.6.4实践环节,表7.1是RandomAccessFile流的常用方法。下列代码将几个整数写入文件,然后按写入的顺序倒序读出所写入的整数。上机调试下列代码,熟悉RandomAccessFile流的常用方法。Application7_10.java,2019/11/19,第39页,7.7数据流7.7.1核心知识_1,DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。它们允许程序按着机器无关的风格读取Java原始数据。以下是DataInputStream和DataOutputStream的构造方法。DataInputStream(InputStreamin)创建的数据输入流指向一个由参数in指定的底层输入流。DataOutputStream(OutnputStreamout)创建的数据输出流指向一个由参数out指定的底层输出流。表7.2是DataInputStream和DataOutputStream类的常用方法。,2019/11/19,第40页,表7.2DataInputStream及DataOutputSteam类的部分方法,2019/11/19,第41页,7.7.2能力目标,使用数据流读、写文件。,2019/11/19,第42页,7.7.3任务驱动,将下列Application7_11.java中的【代码】替换为程序代码.程序运行效果如图7.10,2019/11/19,第43页,任务小结,数据流输入流不能直接指向文件,必须指向一个InputStream子类创建的流,这个流称为数据输入流的底层流,底层流负责指向文件。同样,数据流输出流不能直接指向文件,必须指向一个OutputStream子类创建的流,这个流称为数据输出流的底层流,底层流负责指向文件。,2019/11/19,第44页,7.7.4实践环节,请上机调试下列代码,并注意程序的运行效果。Application7_12.javaEncryptAndDecrypt.java,2019/11/19,第45页,7.8解析文件7.8.1核心知识,1使用默认分隔标记解析文件创建Scanner对象,并指向要解析的文件,例如:Filefile=newFile(hello.java);Scannersc=newScanner(file);那么sc将空格作为分隔标记、调用next()方法依次返回file中的单词,如果file最后一个单词已被next()方法返回,sc调用hasNext()将返回false,否则返回true。2使用正则表达式作为分隔标记解析文件创建Scanner对象,指向要解析的文件,并使用useDelimiter方法指定正则表达式作为分隔标记,例如:Filefile=newFile(hello.java);Scannersc=newScanner(file
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校教师资格证之《高等教育法规》练习题(一)附答案详解ab卷
- 2024自考专业(金融)考前冲刺练习带答案详解(突破训练)
- 2025年高校教师资格证之《高等教育法规》题库检测试卷及答案详解(必刷)
- 2025年广东金融学院单招《职业适应性测试》经典例题及答案详解(历年真题)
- 2024年安全员考试题库AB卷附答案详解
- 2024安全监察人员综合提升测试卷(重点)附答案详解
- 2025年教师资格模拟试题及参考答案详解【模拟题】
- 2025年山东东营市市属医疗卫生机构高层次人才招聘36人笔试备考题库及答案详解一套
- 2023年度银行岗位题库检测试题打印及答案详解【易错题】
- 2024-2025学年度执业兽医综合提升测试卷【原创题】附答案详解
- 2025年装载机行业当前竞争格局与未来发展趋势分析报告
- 学校红领巾网络安全教育广播稿
- 基于4C理论宜宾蜜雪冰城营销策略研究
- 医院院士工作站申报材料
- 如何上好语文课的讲座
- 2025秋部编版二年级上册语文教学计划教学进度表
- 2025年高校教师思政素质和师德师风考试题库及答案
- 2025版预制构件浇筑施工合同规范文本
- 2025年安徽省申论c类试题及答案
- 公司物资盘点管理办法
- 骨科门诊常见病诊疗流程
评论
0/150
提交评论