第8章输入输出流

上传人:仙*** 文档编号:172652490 上传时间:2022-12-05 格式:PPT 页数:21 大小:334.52KB
返回 下载 相关 举报
第8章输入输出流_第1页
第1页 / 共21页
第8章输入输出流_第2页
第2页 / 共21页
第8章输入输出流_第3页
第3页 / 共21页
点击查看更多>>
资源描述
清华大学出版社清华大学出版社 JavaEE基础教程基础教程 第第8 8章章 输入输出流输入输出流8.1 获取文件和目录的属性获取文件和目录的属性8.2 Java中的中的I/O流流8.3 字节流字节流8.4 字符流字符流Java EEJava EE基础教程基础教程2 22022年年12月月5日星期一日星期一 通过允许程序读取文件的内容或者向文件中写入内容,可以使程序的开发更加灵活。要从文件、内存或网络读取信息,程序必须打开源的一个流;同样,通过打开至目标的一个流,并按顺序写入信息,程序可以向文件写入信息。Java EEJava EE基础教程基础教程3 32022年年12月月5日星期一日星期一8.1 获取文件和目录的属性获取文件和目录的属性 在在JavaJava语言中,提供了获取和修改文件语言中,提供了获取和修改文件/目录属性的类目录属性的类java.io.Filejava.io.File。FileFile类的使用是与平台无关的,适用于不类的使用是与平台无关的,适用于不同的文件系统。在程序中,通过创建同的文件系统。在程序中,通过创建FileFile类的对象来代表类的对象来代表一个文件或目录,利用这个对象可以对文件或目录的属性一个文件或目录,利用这个对象可以对文件或目录的属性进行有关操作。进行有关操作。表表8-18-1列举了列举了FileFile类的主要方法和说明。类的主要方法和说明。返回Java EEJava EE基础教程基础教程4 42022年年12月月5日星期一日星期一 例8-1对文件和目录的操作程序清单:ch08FileAndDirectoryTest.javaimport java.io.File;public class FileAndDirectoryTest public static void main(String args)String filename=testFile;File f1=new File(filename);/ASystem.out.println(filename+是否存在:+f1.exists();System.out.println(filename+是文件吗:+f1.isFile();System.out.println(filename+最后修改时间:+f1.lastModified();System.out.println(filename+文件大小:+f1.length();String direname=testDire;File f2=new File(direname);/BSystem.out.println(direname+的绝对路径:+f2.getAbsolutePath();if(f2.isDirectory()/CString fileList=f2.list();/DSystem.out.println(direname+目录中的文件和目录包括:);for(int i=0;i0)String s=new String(b,0,rs);/DSystem.out.print(s);rs=fis.read(b,0,10);fis.close();/Ecatch(IOException e)e.printStackTrace();如果在C盘中存在该文件,文件的内容为“This is you English book!”,则程序的运行结果如下所示:This is you English book!Java EEJava EE基础教程基础教程11112022年年12月月5日星期一日星期一在使用在使用FileInputStreamFileInputStream类进行文件读取时,需要注意以下几点:类进行文件读取时,需要注意以下几点:1 1)待读取的文件一定要存在,否则会出现异常;)待读取的文件一定要存在,否则会出现异常;2 2)文件的路径可以采用绝对路径和相对路径两种,例题中采用的是)文件的路径可以采用绝对路径和相对路径两种,例题中采用的是绝对路径;编程时,可以把待读取的文件放在程序文件所在的项绝对路径;编程时,可以把待读取的文件放在程序文件所在的项目下,通过目下,通过FileInputStream fis=new FileInputStream(in.txt);FileInputStream fis=new FileInputStream(in.txt);创建创建FileInputStreamFileInputStream实例对象,有利于提高程序的可移植性;实例对象,有利于提高程序的可移植性;3 3)FileInputStreamFileInputStream类既可以用来读取文本文件,也可以读取二进制类既可以用来读取文本文件,也可以读取二进制文件,比如:图像、声音等;文件,比如:图像、声音等;4 4)在不需要使用时,要及时关闭流对象,释放与它关联的所有系统)在不需要使用时,要及时关闭流对象,释放与它关联的所有系统资源。资源。Java EEJava EE基础教程基础教程12122022年年12月月5日星期一日星期一8.3.2 FileOutputStream8.3.2 FileOutputStream流流 FileOutputStreamFileOutputStream类是类是OutputStreamOutputStream类的子类。它能类的子类。它能够实现以字节形式将数据写入文件中。该类的所有方法都够实现以字节形式将数据写入文件中。该类的所有方法都是从是从OutputStreamOutputStream类继承并重写的。在创建该类的实例对类继承并重写的。在创建该类的实例对象时,与象时,与FileInputStreamFileInputStream类相似,文件可以使用相对路径类相似,文件可以使用相对路径和绝对路径;但与和绝对路径;但与FileInputStreamFileInputStream类的区别是:如果文件类的区别是:如果文件不存在,则创建一个新的文件;如果文件存在,则把原来不存在,则创建一个新的文件;如果文件存在,则把原来的文件删除,然后再创建一个新的文件。的文件删除,然后再创建一个新的文件。Java EEJava EE基础教程基础教程13132022年年12月月5日星期一日星期一例8-3 将文件notepad.exe的内容拷贝到note.exe文件中程序清单:ch08FileOutExample.javaimport java.io.*;public class FileOutExample public static void main(String args)int rs;byte b=new byte10;tryFileInputStream fis=new FileInputStream(notepad.exe);FileOutputStream fos=new FileOutputStream(note.exe);System.out.println(开始拷贝文件,请稍候.);rs=fis.read(b,0,10);/Awhile(rs0)fos.write(b,0,10);rs=fis.read(b,0,10);/BSystem.out.println(文件拷贝结束,谢谢!);fis.close();/Cfos.close();/Dcatch(IOException e)e.printStackTrace();Java EEJava EE基础教程基础教程14142022年年12月月5日星期一日星期一 在上面的程序中,文件“notepad.exe”是Windows系统提供的的记事本应用程序,系统运行这个程序可以创建文本文件。分析上面的程序可知:首先根据提供的两个文件创建字节输入流对象fis和字节输出流对象fos,建立与磁盘文件的连接;如果文件“notepad.exe”文件不存在,会引发异常;不管“note.exe”文件是否存在,fos对象的创建都不会受影响。从代码行A至B行,首先通过流对象fis从文件“notepad.exe”中读取10个字节的内容,然后通过fos对象的write()方法,将内容写入与fos对象关联的“note.exe”文件中,直到读至文件的尾部。代码行C和D关闭两个流对象,释放它们占用的系统资源,同时将缓冲区中的内容保存到“note.exe”文件中。程序执行后,运行“note.exe”文件,发现它具有与“notepad.exe”文件同样的功能,说明文件拷贝是正确的。需要指出的是,用FileOutputStream类执行写文件操作时,只能从文件的开始部分写入,不能实现追加写入的功能;在完成相关操作后一定要及时关闭流对象。如果需要创建的文件已经存在,但它是一个目录,而不是一个常规文件,则抛出异常;或者该文件不存在,但无法创建它,抑或因为其他某些原因而无法打开它,也会抛出异常。另外,使用该类执行写入操作时,并不区分写入的是什么类型的文件。Java EEJava EE基础教程基础教程15152022年年12月月5日星期一日星期一8.4 字符流字符流 前面介绍的前面介绍的FileInputStreamFileInputStream类和类和FileOutputStreamFileOutputStream类类只能处理普通的字节流。采用这种流在处理只能处理普通的字节流。采用这种流在处理1616位的位的UnicodeUnicode码表示的字符流时很不方便,容易引起错误。码表示的字符流时很不方便,容易引起错误。java.iojava.io包中包中有专门用于处理字符流的类:有专门用于处理字符流的类:ReaderReader和和WriterWriter等。等。返回Java EEJava EE基础教程基础教程16162022年年12月月5日星期一日星期一 8.4.1 Reader流 该类是用于处理字符输入流类的父类,它是一个抽象类,不能实例化它的对象。表8-4列出了该类的常用方法。8.4.2 Writer流 该类是处理字符输出流的父类,Writer类定义了写入字符和字符数组的方法,与Reader类、InputStream类相似,在创建对象时会自动打开流,通过显式调用close()方法关闭流。表8-5列举了该类的常用方法。Java EEJava EE基础教程基础教程17172022年年12月月5日星期一日星期一8.4.3 FileReader8.4.3 FileReader流流该类是该类是ReaderReader类的子类,它实现了从文件中读取字符数据,是文件字符输入流。类的子类,它实现了从文件中读取字符数据,是文件字符输入流。与与FileInputStreamFileInputStream类相似,在创建类相似,在创建FileReaderFileReader对象时,如果给定路径上不存对象时,如果给定路径上不存在所需的文件,则会出现异常。在所需的文件,则会出现异常。例例8-4 8-4 将将WordWord文件文件“java.txt”java.txt”读出并输出到控制台。读出并输出到控制台。程序清单:程序清单:ch08ReaderExample.javach08ReaderExample.javaimport java.io.import java.io.*;public class ReaderExample public class ReaderExample public static void main(String args)public static void main(String args)try try File f=new File(java.txt);File f=new File(java.txt);FileReader fr=new FileReader(f);/AFileReader fr=new FileReader(f);/Aint len=fr.read();int len=fr.read();/B/Bwhile(len=0)while(len=0)System.out.print(char)len);System.out.print(char)len);len=fr.read();len=fr.read();Java EEJava EE基础教程基础教程18182022年年12月月5日星期一日星期一fr.close();fr.close();/C/C catch(FileNotFoundException e)catch(FileNotFoundException e)e.printStackTrace();e.printStackTrace();catch(IOException e)catch(IOException e)e.printStackTrace();e.printStackTrace();假定文件假定文件“java.txt”java.txt”的内容是:的内容是:“Java is a good OOP language.Java is a good OOP language.Java Java是一门面向对象的语言。是一门面向对象的语言。”则执行上述程序后,输出的结果与上面的内容一致。说明用上述程序可以同则执行上述程序后,输出的结果与上面的内容一致。说明用上述程序可以同时实现对英文和汉字的读取和显示。该程序的时实现对英文和汉字的读取和显示。该程序的A A行创建了字符输入流对象行创建了字符输入流对象frfr,建,建立文件立文件“java.txt”java.txt”与流对象的连接,打开与流对象的连接,打开“java.txt”java.txt”文件。然后通过文件。然后通过B B行代行代码在文件中读取一个字符,如果已经读到文件尾则变量码在文件中读取一个字符,如果已经读到文件尾则变量“len”len”的值为的值为-1-1,通过,通过判断判断“len”len”的值进行控制。的值进行控制。C C行代码关闭了该流对象,释放了该对象占用的所行代码关闭了该流对象,释放了该对象占用的所有有系统资源。系统资源。Java EEJava EE基础教程基础教程19192022年年12月月5日星期一日星期一8.4.4 FileWriter流该类是Writer类的子类,实现了将字符数据写入文件的功能,是文件字符输出流。如果需要写入的文件不存在,则会新建该文件,否则会删除旧文件,建立新的文件。下面通过例题介绍该类的使用。例8-5 创建5个2000之内的随机数,然后存储到文件“rand.txt”中。程序清单:ch08WriterExample.javaimport java.io.*;import java.util.Random;public class WriterExample public static void main(String args)Random rand=new Random();/Atry FileWriter fw=new FileWriter(rand.txt);/Bint rs;for(int i=0;i5;i+)rs=rand.nextInt(2000);/Cfw.write(String.valueOf(rs);/DJava EEJava EE基础教程基础教程20202022年年12月月5日星期一日星期一fw.write(JavaEE教程);/Efw.close();/F catch(IOException e)e.printStackTrace();该程序代码使用了Random类产生随机数,使用了类FileWriter进行文件的写入。在代码行A行创建一个java.uti.Random对象,C行代码使用该类的nextInt()方法产生一个小于2000的随机数;在代码行B创建了一个FileWriter类的对象,D行代码利用前面介绍的方法将产生的随机整数转换为字符串写入文件中;代码行E直接在文件中写入字符串;代码行F关闭流对象,将缓冲区的内容写入文件。Java EEJava EE基础教程基础教程21212022年年12月月5日星期一日星期一The End
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!