版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元10I/O流Java程序设计基础教程(AI助学)(慕课版)人民邮电出版社想象一下,一位热爱旅行的摄影爱好者,经常在旅途中拍摄大量的照片及视频,希望能够有效地管理和整理这些照片及视频,并将它们分享给家人和朋友。本单元将介绍I/O流的基本概念,I/O流类似于相机;File类的使用,在Java应用程序中处理文件和目录,类似于使用相册来整理和存储照片。I/O流用于数据的读写操作,而File类代表磁盘文件本身,提供文件路径和相关信息。两者紧密相关,因为I/O流通常需要通过File类定位文件。因此,本单元也会讲解File类的内容。通过学习本单元内容,读者可以掌握处理文件和数据的相关操作,能够有效地管理和整理照片、视频等文件,并实现数据的输入和输出功能,在处理文件和数据时更加得心应手。本章导读Thechapter’sintroduction目录导航10.1
I/O流的概念10.2
File类10.3字节流10.5
【商业实例】“银行提款机”项目——将操作输出到日志文件中10.6
【综合实训】改写文件中的指定字符10.4字符流10.1I/O流的概念I/O流是Java中用于处理输入和输出数据的机制。I/O流用于从源读取数据并将其写入目标,这些源和目标可以是文件、网络、内存等。I/O流分为输入流和输出流,分别用于读取和写入数据。01数据传输主要用于在程序和外部数据源(如文件、网络)之间传输数据,实现数据的读取和写入03网络通信在网络编程中,I/O流用于在不同计算机之间传输数据,实现客户端和服务器端之间的通信05用户交互用于与用户进行交互,从控制台读取用户输入,将程序的输出显示给用户02文件操作I/O流提供了对文件和目录的读取、写入、创建、删除等操作,使得程序能够对文件系统进行灵活的管理04数据处理通过I/O流,可以对数据进行实时处理,如在内存中操作数据、对图像或音频进行处理等目录导航10.1
I/O流的概念10.2
File类10.3字节流10.5
【商业实例】“银行提款机”项目——将操作输出到日志文件中10.6
【综合实训】改写文件中的指定字符10.4字符流10.2.1File对象的创建在Java中,创建File对象是操作文件和目录的第一步。File类提供了多个构造方法来实现不同类型的文件和目录对象的创建。FilefileByPath=newFile("C:/example.txt");通过文件路径创建File对象01FilefileByDirAndName=newFile("C:/documents","example.txt");通过目录和文件名创建File对象02FilefileByParentAndChild=newFile("C:/documents");FilechildFile=newFile(fileByParentAndChild,"example.txt");通过父目录和子目录创建File对象03URIuri=URI.create("file:/C:/example.txt");FilefileByUri=newFile(uri);通过URI创建File对象04注意:创建File对象并不会在文件系统中创建实际的文件或目录,它只是一个Java应用程序中的表示。使用绝对路径或相对路径都是可行的,但建议使用绝对路径以避免不同环境中的路径问题。10.2.1File对象的创建创建File对象的示例代码如下。importjava.io.File;import.URI;publicclassFileCreationExample{publicstaticvoidmain(String[]args){//通过文件路径创建File对象
FilefileByPath=newFile("C:/example.txt");//通过目录和文件名创建File对象
FilefileByDirAndName=newFile("C:/documents","example.txt");//通过父目录和子目录创建File对象
FilefileByParentAndChild=newFile("C:/documents");FilechildFile=newFile(fileByParentAndChild,"example.txt");//通过URI创建File对象
URIuri=URI.create("file:/C:/example.txt");FilefileByUri=newFile(uri);}}10.2.2File类的常用方法1.文件和目录操作(1)createNewFile():创建一个新的空文件。FilenewFile=newFile("example.txt");try{if(newFile.createNewFile()){System.out.println("文件创建成功");}else{System.out.println("文件已存在");}}catch(IOExceptione){e.printStackTrace();}(2)mkdir():创建单级目录FilenewDir=newFile("example_directory");if(newDir.mkdir()){System.out.println("目录创建成功");}10.2.2File类的常用方法(3)mkdirs():创建多级目录FilenewDirs=newFile("example/multi/level/directory");if(newDirs.mkdirs()){System.out.println("多级目录创建成功");}(4)delete():删除文件或空目录FilefileToDelete=newFile("example.txt");if(fileToDelete.delete()){System.out.println("文件删除成功");}FiledirToDelete=newFile("example_directory");if(dirToDelete.isDirectory()&&dirToDelete.list().length==0){if(dirToDelete.delete()){System.out.println("目录删除成功");}else{System.out.println("目录删除失败,可能目录非空");}}10.2.2File类的常用方法2.文件信息获取(1)getName():获取文件或目录的名称Filefile=newFile("example.txt");System.out.println("文件名:"+file.getName());(2)getPath():获取文件或目录的路径System.out.println("文件路径:"+file.getPath());(3)isFile():判断是否为文件booleanisFile=file.isFile();System.out.println("是否为文件:"+isFile);(4)isDirectory():判断是否为目录booleanisDir=file.isDirectory();System.out.println("是否为目录:"+isDir);10.2.2File类的常用方法3.目录遍历(1)list():获取目录中的文件或子目录名称数组Filedirectory=newFile("example_directory");String[]files=directory.list();if(files!=null){for(StringfileName:files){System.out.println("文件或子目录:"+fileName);}}(2)listFiles():获取目录中的File对象数组File[]fileObjects=directory.listFiles();if(fileObjects!=null){for(Filefile:fileObjects){System.out.println("File对象:"+file.getName());}}10.2.2File类的常用方法4.递归删除目录针对非空目录,需要递归删除其所有内容。publicstaticvoiddeleteDirectory(Filedirectory){if(!directory.exists()){System.out.println("目录不存在");return;}File[]files=directory.listFiles();if(files!=null){for(Filefile:files){if(file.isDirectory()){deleteDirectory(file);}else{booleandeleted=file.delete();System.out.println("文件删除成功:"+deleted);}}}
booleandeletedDir=directory.delete();System.out.println("目录删除成功:"+deletedDir);}//使用示例FiledirectoryToDelete=newFile("example_directory");deleteDirectory(directoryToDelete);目录导航10.1
I/O流的概念10.2
File类10.3字节流10.5
【商业实例】“银行提款机”项目——将操作输出到日志文件中10.6
【综合实训】改写文件中的指定字符10.4字符流10.3.1InputStream类和OutputStream类在Java中,InputStream类和OutputStream类是用于处理字节流的两个抽象类,它们均位于java.io包中。这两个类是字节流操作的基础,提供了一组用于读取和写入字节数据的方法。InputStream和OutputStream都实现了Closeable接口,Closeable继承AutoCloseable,两者都提供了释放资源的方法。使用完这些流后必须关闭它们,否则像打开水龙头后忘记关闭一样,会导致资源被占用且无法释放。InputStream类和OutputStream类的继承关系如图10.1所示。图10.1InputStream类和OutputStream类的继承关系10.3.2FileInputStream类和FileOutputStream类FileInputStream类和FileOutputStream类分别属于字节输入流和字节输出流的子类,用于实现文件的读取和写入操作。FileInputStream和FileOutputStream是InputStream和OutputStream的实现类,这两个类通常用于处理二进制文件,如图像、音频、视频等。FileInputStream类和FileOutputStream类的继承关系如图10.2所示。图10.2FileInputStream类和FileOutputStream类的继承关系10.3.1InputStream类和OutputStream类1.FileInputStream类FileInputStream类是用于从文件中读取字节数据的类。它继承InputStream类,可以通过指定文件路径来创建一个文件输入流,并使用其提供的方法逐字节读取文件内容。publicstaticvoidmain(String[]args){InputStreaminputStream=null;try{//创建一个文件输入流,使其指向特定的文件路径
inputStream=newFileInputStream("D:\\example.txt");intdata;//读取文件内容,直至文件结束
while((data=inputStream.read())!=-1){//将读取到的字节数据转换为字符,并输出到控制台
System.out.print((char)data);}}catch(IOExceptione){//捕获并输出可能发生的I/O异常信息
e.printStackTrace();}finally{//关闭流
if(inputStream!=null){try{//关闭流,释放系统资源
inputStream.close();}catch(IOExceptione){//忽略在关闭流时可能发生的I/O异常
}}}}通过FileInputStream读取“example.txt”文件内容并将其输出到控制台,如图10.3所示图10.3FileInputStream类读取文件内容后的输出结果10.3.1InputStream类和OutputStream类2.FileOutputStream类FileOutputStream类是用于向文件写入字节数据的类。它继承OutputStream类,通过指定文件路径创建一个文件输出流,并使用其提供的方法将字节数据写入文件。publicclassOutputStreamDemo{/***main()函数,程序入口*该函数演示了如何使用FileOutputStream将内容写入文件*/publicstaticvoidmain(String[]args){OutputStreamoutputStream=null;try{//创建一个文件输出流,指向D盘的“output.txt”文件
outputStream=newFileOutputStream("D:\\output.txt");//将字符串“Hello,OutputStream!”转换为字节数组
byte[]data="Hello,OutputStream!".getBytes();//将字节数组写入文件输出流
outputStream.write(data);}catch(IOExceptione){//如果发生IOException,则输出堆栈跟踪信息
e.printStackTrace();}finally{//关闭流
if(outputStream!=null){try{outputStream.close();}catch(IOExceptione){//忽略在关闭流时可能发生的I/O异常
}}}}}将内容“Hello,OutputStream!”写入文件“output.txt”,如图10.4所示图10.4FileOutputStream类将内容写入文件10.3.3DataInputStream类和DataOutputStream类装饰流是JavaI/O流体系中的一种重要设计模式,它通过包装节点流来添加额外的功能或提高性能,从而使得数据处理更加高效和方便。DataInputStream类和DataOutputStream类是java.io包中的装饰流,它们分别继承FilterInputStream和FilterOutputStream类,从而提供了便捷的读写基本数据类型(如int、double、boolean等)的方法。DataInputStream类和DataOutputStream类的继承关系如图10.5所示。图10.5DataInputStream类和DataOutputStream类的继承关系10.3.3DataInputStream类和DataOutputStream类DataInputStream类继承FilterInputStream类并实现了DataInput接口。主要用于从输入流中读取字节并将它们转换为适当的基本数据类型(如int、short、long、float、double、boolean、char等)。1.DataInputStream类readBoolean():读取一个布尔值readByte():读取一个字节值readChar():读取一个字符值readDouble():读取一个双精度值readFloat():读取一个浮点值readInt():读取一个整数值readLong():读取一个长整数值readShort():读取一个短整数值readUTF():读取一个UTF-8格式的字符串10.3.3DataInputStream类和DataOutputStream类使用DataInputStream类来读取文件内容的示例如下:importjava.io.DataInputStream;importjava.io.FileInputStream;importjava.io.IOException;publicclassDataInputStreamDemo{publicstaticvoidmain(String[]args){FileInputStreamfis=null;DataInputStreamdis=null;try{//创建一个文件输入流
fis=newFileInputStream("D:\\data.txt");//创建一个数据输入流
dis=newDataInputStream(fis);//读取数据
inti=dis.readInt();doubled=dis.readDouble();longl=dis.readLong();booleanb=dis.readBoolean();charc=dis.readChar();Strings=dis.readUTF();//输出读取的数据System.out.println("Readvalues:"+i+","+d+","+l+","+b+","+c+","+s);//关闭流
dis.close();fis.close();}catch(IOExceptione){e.printStackTrace();}finally{if(dis!=null){try{dis.close();}catch(IOExceptione){}}if(fis!=null){try{fis.close();}catch(IOExceptione){}}}}}10.3.3DataInputStream类和DataOutputStream类2.DataOutputStream类DataOutputStream
类以一种与平台无(不依赖于特定计算机操作系统,如Windows、Linux、macOS等)的方式将基本数据类型和字符串写入输出流DataOutputStream
类是FilterOutputStream
类的子类,实现了DataOutput
接口DataOutputStream
类提供了一系列的write方法将各种基本数据类型转换为字节,并将这些字节写入底层的输出流法包括writeBoolean()、writeByte()、writeChar(),writeDouble()、writeFloat()、writeInt()、writeLong()、writeShort()和writeUTF()等10.3.3DataInputStream类和DataOutputStream类使用DataOutputStream类写入文件内容的示例如下:importjava.io.DataOutputStream;importjava.io.FileOutputStream;importjava.io.IOException;publicclassDataOutputStreamDemo{publicstaticvoidmain(String[]args){FileOutputStreamfos=null;DataOutputStreamdos=null;try{//创建一个文件输出流
fos=newFileOutputStream("D:\\data.txt");//创建一个数据输出流
dos=newDataOutputStream(fos);//写入数据
dos.writeInt(123);dos.writeDouble(456D);dos.writeLong(789L);dos.writeBoolean(true);dos.writeChar(125);dos.writeUTF("HelloWorld");//关闭流
dos.close();fos.close();}catch(IOExceptione){e.printStackTrace();}finally{if(fos!=null){try{fos.close();}catch(IOExceptione){}}if(dos!=null){try{dos.close();}catch(IOExceptione){}}}}}10.3.4字节流BufferedInputStream类和BufferedOutputStream类BufferedInputStream类和BufferedOutputStream类属于字节缓冲流。字节缓冲流是对字节流的一种封装,通过在内存中开辟缓冲区来提高I/O操作的效率。这两个类通常用于包装其他字节流,如FileInputStream类和FileOutputStream类。BufferedInputStream类与BufferedOutputStream类的继承关系如图10.8所示。图10.8BufferedInputStream类与BufferedOutputStream类的继承关系10.3.4字节流BufferedInputStream类和BufferedOutputStream类BufferedInputStream类和BufferedOutputStream类的特点如下。有缓冲区BufferedInputStream类内部有一个缓冲区(默认大小为8192字节),当从BufferedInputStream类中读取数据时,它会尽可能多地读取一些数据并保存到缓冲区中阻塞I/O和其他的输入流类一样,BufferedInputStream类的读取操作是阻塞的,也就是说,如果没有数据可读,那么读取操作会一直等待,直至有数据可读支持标记和重置BufferedInputStream类支持mark()和reset()方法。mark()方法可以在当前位置设置一个标记,并可以继续从流中读取数据;reset()方法则能让BufferedInputStream类回退到该标记的位置,从而重新读取数据10.3.4字节流BufferedInputStream类和BufferedOutputStream类BufferedInputStream类用于在内存中创建一个缓冲区,从而提高读取文件的效率。它继承FilterInputStream类,可以包装其他的输入流,实现缓冲读取。1.BufferedInputStream类publicclassBufferInputStreamDemo{/***main()函数,用于读取文件内容并输出到控制台*该函数演示了如何使用BufferedInputStream读取本地文件*/publicstaticvoidmain(String[]args){try(BufferedInputStreambis=newBufferedInputStream(newFileInputStream("D://buffer.txt"))){intdata;//循环读取文件中的每一个字节,直至文件结束
while((data=bis.read())!=-1){//将读取到的字节转换为字符,并输出到控制台
System.out.print((char)data);}}catch(IOExceptione){//异常处理:输出异常的堆栈跟踪信息
e.printStackTrace();}}}BufferedInputStream类的输出结果如图10.9所示。图10.9BufferedInputStream类的输出结果10.3.4字节流BufferedInputStream类和BufferedOutputStream类BufferedOutputStream类同样在内存中创建一个缓冲区,用于提高文件写入的效率。它继承FilterOutputStream类,可以包装其他的输出流,实现缓冲写入。2.BufferedOutputStream类importjava.io.*;publicclassBufferOutputStreamDemo{/***main()函数,用于执行文件写入操作*使用BufferedOutputStream写入字节数据到文件中*该函数演示了如何安全地处理文件写入操作,自动管理资源的释放*/publicstaticvoidmain(String[]args){try(BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("D:\\buffer.txt"))){//将字符串转换为字节数组,准备写入文件
byte[]data="Hello,BufferedOutputStream!".getBytes();//将字节数组写入BufferedOutputStreambos.write(data);}catch(IOExceptione){//捕获并输出IOException信息,用于进行调试和错误追踪
e.printStackTrace();}}}BufferedOutputStream类的输出结果如图10.10所示。图10.10BufferedOutputStream类的输出结果10.3.5PrintStream类PrintStream类是用于输出各种数据类型的输出流。它继承FilterOutputStream类,并且提供了丰富的输出方法(如print()和println()),通常用于输出到控制台或文件,示例代码如下所示。importjava.io.FileNotFoundException;importjava.io.PrintStream;publicclassPrintStreamDemo{/***main()函数,程序入口*该函数演示了如何使用PrintStream类进行文件输出,包括格式化输出*/publicstaticvoidmain(String[]args){//尝试使用资源管理自动关闭PrintStream类,避免资源泄漏try(PrintStreamps=newPrintStream("D:\\printStream.txt")){//向文件中输出一行文本ps.println("Hello,PrintStream!");//向文件中输出格式化文本ps.printf("Formatted%s%n","output");}catch(FileNotFoundExceptione){//捕获文件未找到异常,并输出异常信息e.printStackTrace();}}}PrintStream类的输出结果如图10.11所示。图10.11PrintStream类的输出结果目录导航10.1
I/O流的概念10.2
File类10.3字节流10.5
【商业实例】“银行提款机”项目——将操作输出到日志文件中10.6
【综合实训】改写文件中的指定字符10.4字符流10.4.1Reader类与Writer类在JavaI/O中,Reader类和Writer类是用于处理字符数据的抽象父类。它们提供了读取和写入字符的方法,是字符流的核心类。图10.12展示了Reader类和Writer类的继承关系。图10.12Reader类和Writer类的继承关系10.4.1Reader类与Writer类Reader类是字符输入流的抽象父类,它允许按字符读取数据,并具有处理字符编码、管理缓冲区、处理错误及提供可扩展性以支持自定义字符输入流等重要特性。1.Reader类01字符输入流Reader类以字符为单位从流中读取数据,这使得读取文本数据(如字符串)变得更加容易02抽象类Reader类是一个抽象类,不能直接实例化,需要使用它的子类,如FileReader类、InputStreamReader类、BufferedReader
类等03阻塞I/O与其他输入流一样,Reader类的读取操作是阻塞的04支持标记和重置Reader类支持mark()和reset()方法10.4.1Reader类与Writer类Writer类是JavaI/O库中的一个抽象类,它是所有字符输出流的父类。字符输出流是可以按字符写入数据的流。2.Writer类Writer类以字符为单位向流中写入数据,这使得写入文本数据(如字符串)变得更加容易字符输出流Writer类是一个抽象类,不能直接实例化,而是需要使用它的子类抽象类Writer类的一些子类(如PrintWriter类)支持自动刷新功能支持自动刷新Writer类不会直接将数据写入目标,而是先将数据写入内部的缓冲区缓冲10.4.2InputStreamReader类与OutputStreamWriter类InputStreamReader类和OutputStreamWriter类是连接字节流和字符流的桥梁,它们提供了字节流与字符流之间相互转换的功能,继承Reader和Writer类,可以更方便地处理字符数据。它们的继承关系如图10.13所示。图10.13InputStreamReader类和OutputStreamWriter类的继承关系10.4.2InputStreamReader类与OutputStreamWriter类InputStreamReader类接收一个InputStream参数,并根据指定的字符集将字节流转换为字符流。其常见的用法是在处理FileInputStream等字节流时,通过指定字符集实现字符数据的读取。示例代码如下。1.InputStreamReader类importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.nio.charset.StandardCharsets;publicclassInputStreamReaderDemo{/***main()函数,用于执行文件读取和输出操作*该函数中使用了try-with-resources语句,确保在读取文件后自动释放资源,避免资源泄漏*/publicstaticvoidmain(String[]args){//使用try-with-resources语句确保文件读取后自动释放资源
try(InputStreamReaderreader=newInputStreamReader(newFileInputStream("D:\\reader.txt"),StandardCharsets.UTF_8)){intdata;//循环读取文件内容,直至文件结束
while((data=reader.read())!=-1){10.4.2InputStreamReader类与OutputStreamWriter类while((data=reader.read())!=-1){//将读取到的内容转换为char类型并输出到控制台
charcharacter=(char)data;System.out.print(character);}}catch(IOExceptione){//捕获并输出异常信息,便于进行调试和错误追踪
e.printStackTrace();}}}图10.14所示为文件“reader.txt”的内容,图10.15所示为程序的输出结果。图10.14文件“reader.txt”的内容图10.15程序的输出结果10.4.2InputStreamReader类与OutputStreamWriter类OutputStreamWriter类接收一个OutputStream参数,并根据指定的字符集将字符流转换为字节流。常见的用法是在处理FileOutputStream等字节流时,通过指定字符集实现字符数据的写入。示例代码如下。2.OutputStreamWriter类importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.nio.charset.StandardCharsets;publicclassOutputStreamWriterDemo{/***main()函数,用于执行文件写入操作*该函数演示了如何创建一个带有UTF-8字符集的OutputStreamWriter实例,并将其用于写入字符串到文件中*该函数中使用了try-with-resources语句,确保在操作完成后自动释放资源,避免资源泄漏*/publicstaticvoidmain(String[]args){//使用FileOutputStream类打开一个文件输出流,指向需要写入的文件路径
/*使用OutputStreamWriter类包装FileOutputStream,指定使用UTF-8字符集*///使用try-with-resources语句,确保在操作完成后自动释放资源
try(OutputStreamWriterwriter=newOutputStreamWriter(new10.4.2InputStreamReader类与OutputStreamWriter类运行以上代码,将内容写入文件“writer.txt”中,写入内容后的文件如图10.16所示。FileOutputStream("D:\\writer.txt"),StandardCharsets.UTF_8)){//定义待写入文件的内容
Stringcontent="Hello,OutputStreamWriter!";//将内容写入文件
writer.write(content);}catch(IOExceptione){//捕获并输出异常信息,便于进行调试和错误追踪
e.printStackTrace();}}}图10.16写入内容后的文件10.4.3FileReader类与FileWriter类FileReader类和FileWriter类是用于处理文件读写的字符流类,分别用于读取和写入字符数据。它们的继承关系如图10.17所示。图10.17FileReader类和FileWriter类的继承关系10.4.3FileReader类与FileWriter类FileReader类是用于读取文件的字符流。它继承InputStreamReader类,通过将字节流转换为字符流,实现对文件的字符级读取。示例代码如下。图10.18所示为文件内容,图10.19所示为程序运行后的输出结果。1.FileReader类importjava.io.FileReader;importjava.io.IOException;publicclassFileReaderDemo{publicstaticvoidmain(String[]args){try(//创建FileReader对象并指定要读取的文件路径
FileReaderreader=newFileReader("D:\\fileReader.txt")){intdata;//循环读取文件内容,直至文件结束
while((data=reader.read())!=-1){//将读取到的内容转换为char类型并输出到控制台
charcharacter=(char)data;System.out.print(character);}}catch(IOExceptione){//捕获并处理读取文件时的异常
e.printStackTrace();}}}图10.15写入内容后的文件图10.18文件内容图10.19程序运行后的输出结果10.4.3FileReader类与FileWriter类FileWriter类是用于将内容写入文件的字符流。它继承OutputStreamWriter类,通过将字符流转换为字节流,实现对文件的字符级写入。FileWriter类同样需要指定字符集,以确保正确地将字符转换为字节。运行以下程序,运行结果如图10.20所示。2.FileWriter类图10.20运行结果importjava.io.FileWriter;importjava.io.IOException;publicclassFileWriterDemo{publicstaticvoidmain(String[]args){try(FileWriterwriter=newFileWriter("D:\\fileWriter.txt")){Stringcontent="Hello,FileWriter!";writer.write(content);}catch(IOExceptione){e.printStackTrace();}}}10.4.4BufferedReader类与BufferedWriter类BufferedReader类继承自Reader类,它提供了一个字符缓冲区,可以从底层输入流中一次性读取多个字符,减少对底层资源的频繁访问,以提高读取效率。使用缓冲区可以避免每次读取都直接访问硬盘或网络。此外,BufferedReader还提供了readLine()方法,可以方便地一次读取一整行文本。示例代码如下。1.BufferedInputStream类importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;publicclassBufferedReaderDemo{/***main()函数,程序入口*该函数用于读取指定文本文件内容,并按行在控制台输出*使用BufferedReader包装FileReader以提高读取效率*/publicstaticvoidmain(String[]args){//使用try-with-resources语句,确保在使用完毕后自动释放资源try(BufferedReaderbr=newBufferedReader(newFileReader("D:\\bufferedReader.txt"))){Stringline;//用于存储每次读取的一行文本//循环读取文件内容,直至文件结束(readLine()返回null)10.4.4BufferedReader类与BufferedWriter类
while((line=br.readLine())!=null){//将读取到的每行内容在控制台输出System.out.println(line);}}catch(IOExceptione){//捕获并输出I/O异常信息,便于进行调试和日志记录e.printStackTrace();}}}BufferedReader类的输出结果如图10.21所示。图10.21BufferedReader
类的输出结果10.4.4BufferedReader类与BufferedWriter类BufferedWriter类继承自Writer类,它提供了一个字符缓冲区,可以一次性将多个字符写入底层输出流,避免对底层资源的频繁访问,以提高写入效率。使用缓冲区可以避免每次写入都直接访问硬盘或网络。此外,BufferedWriter提供了newLine()方法,可以写入与操作系统相关的行分隔符,增强了跨平台性。示例代码如下。2.BufferedWriter类importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;publicclassBufferedWriterDemo{/***main()函数,用于演示如何使用BufferedWriter类写入文件*该函数尝试将一段文本字符串写入指定的文件*/publicstaticvoidmain(String[]args){try(//创建BufferedWriter对象,用于高效地写入文本文件//这里使用try-with-resources语句,确保在操作完成后自动释放资源
10.4.4BufferedReader类与BufferedWriter类BufferedWriterbw=newBufferedWriter(newFileWriter("D:\\bufferedWriter.txt"))){//写入文本内容bw.write("Hello,BufferedWriter!");//写入换行符(跨平台)bw.newLine();//继续写入第二行内容bw.write("这是第二行文本。");}catch(IOExceptione){//捕获并输出I/O异常信息,便于调试和进行错误追踪e.printStackTrace();}}}图10.22BufferedOutputStream类写入的文本运行以上代码,运行结果如图10.22所示。10.4.5PrintWriter类PrintWriter类同样是用于输出各种数据类型的输出流,它比PrintStream类更通用。与PrintStream类相比,PrintWriter类可以指定字符集,支持自动刷新,并提供了更多的构造方法。运行以下程序,写入结果如图10.23所示。importjava.io.FileNotFoundException;importjava.io.PrintWriter;publicclassPrintWriterDemo{/***main()函数,程序入口*该函数演示了如何使用PrintWriter类进行文件写入*它尝试在指定路径下创建一个文件,并向其中写入文本*/publicstaticvoidmain(String[]args){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木制家具工管理应用知识考核试卷含答案
- 供排水泵站运行工安全教育强化考核试卷含答案
- 液氯气化处理工安全实践考核试卷含答案
- 重冶备料工岗位水平考核试卷含答案
- 2026年容器化数据库的加密存储配置
- 昆明春节消防安全指南
- 人工智能应用场景大全
- 企业管理年终总结
- 风管防潮层铺设验收记录
- 停车场管理系统安装施工方案
- 护士岗位招聘笔试题与参考答案2026年
- 2026年广西公需科目《人工智能国家战略与政策通识》题库
- 第7课 走近我们的引路人 第3课时(课件)2025-2026学年道德与法治三年级上册统编版
- 退休医生劳务合同协议
- 除氟药剂采购合同协议
- 2022调度自动化主站远方操作一体化防误技术规范
- GB/T 16439-2024交流伺服系统通用技术规范
- 《中国噬血细胞综合征诊断与治疗指南(2022年版)》解读
- 消防设施自查报告
- 中医养生学教学大纲
- 新生儿颅内出血的护理查房课件
评论
0/150
提交评论