第8章输入输出流与文件操作课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第8章输入输出流与文件操作课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 输入输出 文件 操作 课件
- 资源描述:
-
1、第八章第八章 输入输出流与文件操作输入输出流与文件操作 输入输出流的分类 Java流的概念 Java使用流(stream)来执行输入输出(I/O)的功能,流是一 种数据的源头和目的之间的通信途径。 标准输入输出 Java系统事先定义好两个流对象,分别与系统的标准输入 和标准输出相联系,它们是System. in和System.out System是Java中一个功能很强大的类,利用它可以获得很 多Java运行时的系统信息。 3132输出流输出流(程序写出数据程序写出数据) 输入流输入流(程序读入数据程序读入数据) Java中根据流操作的种类可分为:字节流和字符流。根据流的方向,流可分为两类:输
2、入流和输出流。Java流类体系结构流类体系结构1 Java流类体系结构流类体系结构2Java流类体系结构流类体系结构3 Java流类体系结构流类体系结构4 Java流的概念输入输出流的分类【例8.1】标准输入输出举例。 标准输入输出 输入输出流的分类import java.io.*;public class IODemopublic static void main(String args) throws IOException int b; int count=0; while(b=System.in.read()!=-1)count+;System.out.print(char)b); S
3、ystem.out.println(); System.out.println(program end); 运行结果:运行结果:输入:输入:a,b,c,d 输出:输出:a,b,c,d输入:输入:Z 输出:输出: program end目录和文件管理目录和文件管理 32文件名的处理文件名的处理 31FileFile类类 文件或目录的生成文件或目录的生成 文件属性测试文件属性测试 普通文件信息和工具普通文件信息和工具 目录操作目录操作 public File(String path):如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件。p
4、ublic File(String path,String name):path是路径名,name是文件名(不可为空)。public File(File dir,String name):dir是路径名,name是文件名。String getName( ):得到一个文件的名称(不包括路径)。String getPath( ):得到一个文件的路径名。String getAbsolutePath( ):得到一个文件的绝对路径名。String getParent( ):得到一个文件的上一级目录名。String renameTo(File newName):将当前文件名更名为给定文件的完整路径。【例8
5、.2】 boolean exists( ):测试当前File对象所指示的文件或目录是否存在,若存在,返回True。boolean createNewFile():创建当前文件。boolean canWrite( ):测试当前文件是否可写。boolean canRead( ):测试当前文件是否可读。boolean isFile( ):测试当前文件是否是文件(不是目录)。boolean isDirectory( ):测试当前文件是否是目录,若为目录则返回True。【例8.3】 long lastModified( ):得到文件最近一次修改的时间。long length( ):得到文件的长度,以字节
6、为单位,若不存在,返回0。boolean delete( ):删除File对象代表的文件或目录,目录需为空。删除成功,返回True。boolean mkdir():生成一个由该对象指定的路径(新目录),若成功,返回True。boolean mkdirs():生成一个新的目录,包含子目录。若成功,返回true。boolean renameTo(File newName):将当前File对象所代表的路径名改为newName所代表的路径名。若成功,返回true。String list():列出当前目录下的文件。【例8.4】 FileFile类的应用类的应用 【例8.5】 【例8.6】 字节流字节流
7、缓冲区流缓冲区流BufferedInputStream和BufferedOutputStream 33顺序读/写文件(FileInputStream与FileOutputStream) 31ByteArrayInputStream和ByteArrayOutputStream 32顺序读/写文件(FileInputStream与FileOutputStream) FileInputStream类从磁盘文件读取数据。常用的构造方法有:FileInputStream(String name):打开文件name用来读取数据。如:FileInputStream f =new FileInputStrea
8、m(c:/test.txt);FileInputStream(File file):打开文件file用来读取数据。如:File f=new File(c:/test.txt); FileInputStream f1=new FileinputStream(f);FileOutputStream类创建文件(如果文件不存在),并将数据写入文件。FileOutputStream类常用的构造方法有:FileOutputStream(String name):打开文件name用来写入数据。如:FileOutputStream f=new FileOutputStream (c:/test.txt);Fi
9、leOutputStream(File file):打开文件file用来写入数据。如:File f =new File(c:/test.txt);FileOutputStream f1=new FileOutputStream (f);FileOutputStream(String name,Boolean append):打开文件name用来写入数据,若append为true,则写入的数据会加到原有文件后面,否则,覆盖原有的文件。如:FileOutputStream f =new FileOutputStream(c:/test.txt,true);字节流字节流 字节流字节流【例8.7】将F
10、ileIO.java复制为FileExam.java.bak。 import java.io.*;public class FileIOpublic static void main(String args) FileInputStream inFile=null; FileOutputStream outFile=null; tryinFile=new FileInputStream(FileIO.java); outFile=new FileOutputStream(FileExam.java.bak); int data; while(data=inFile.read()!=-1)out
11、File.write(data); catch(FileNotFoundException e)System.out.println(e.getMessage(); catch(IOException e)System.out.println(e.getMessage(); finallyif(inFile!=null)tryinFile.close();catch(IOException e) if(outFile!=null)tryoutFile.close();catch(IOException e) 程序运行结果程序运行结果【解题分析】以下问题的求解过程可分解如下:【解题分析】以下问题
12、的求解过程可分解如下:先打开文件先打开文件FileExam.java用用read()将其内容逐字节读取出来将其内容逐字节读取出来(如果返回值为如果返回值为-1,则,则表明已到达文件尾端表明已到达文件尾端)再用再用write()将读出的字节逐一写入另一个文件将读出的字节逐一写入另一个文件FileExam.java.bak中中若文件无法打开若文件无法打开(例如例如FileExam.java不存在不存在)或无法生成或无法生成(FileExam.java.bak),则抛出,则抛出FileNotFoundException异常,异常,若读写出错,则抛出若读写出错,则抛出IOException异常。异常。
13、最后,在最后,在finally中关闭文件。中关闭文件。 在使用在使用FileInputStream类时,若关联的目录或者文件不存在,类时,若关联的目录或者文件不存在,Java会抛出一个会抛出一个IOException异常。程序可以使用异常。程序可以使用try-catch块检测和块检测和处理捕捉到的异常。处理捕捉到的异常。 为了把一个文件输入流对象与一个文件关联起来,可以使用下列为了把一个文件输入流对象与一个文件关联起来,可以使用下列的代码段来处理的代码段来处理Java产生的产生的IOEception异常。异常。 例如:例如:try FileInputStream fis=new FileInp
14、utStream(java.txt); catch(IOException e) System.out.println(File Exception:+e); 注:注:字节流字节流 ByteArrayInputStream和ByteArrayOutputStream 字节流字节流 ByteArrayInputStream 将字节数组用作源,并在该数组中执行读 操作。它有两种构造方法。第一种构造方法将字节数组作为参数。ByteArrayInputStream(byte buffer):生成一个字节数组的输入流,并指定一个字节数组buffer为此输入流的流缓冲区。如:ByteArrayInputS
15、tream b =new ByteArrayInputStream(buf);另外一种构造方法是从指定的字节数组来创建。ByteArrayinputStream b =new ByteArrayinputStream(buf,off,len);其中off是要读取的第一个字节的偏移,len是要读取数组的字节数;ByteArrayOutputStream有2种构造方法。ByteArrayOutputStream():生成一个字节数组的输出流,其缓冲区的默认初始大小为32字节,若有需要,缓冲区的大小会随之增加。如:ByteArrayOutPutStream b=new ByteArrayOutput
16、Stream();ByteArrayOutputStream(int size):创建32个字节的缓冲器用于储存数据,但分配size字节的初始大小给此缓冲区。如:ByteArrayOutputStream b1=new ByteArrayOutputStream(size);创建大小为size的缓冲器ByteArrayOutputStream的一些常用方法:int size():返回此流缓冲区的大小。byte toByteArray():生成一个新的字节数组,并将流的内容复制到此字节数组。String toString():将流的内容转换为String对象。【例8.8】程序读入文件ByteIO
17、.java,将其内容写入内存中(一个字节数组),接着转换为String对象。 字节流字节流import java.io.*;import java.util.*;public class ByteIOpublic static void main(String args) tryFile inFile=new File(“ByteIO.java); FileInputStream inData=new FileInputStream(inFile); ByteArrayOutputStream dataArray=new ByteArrayOutputStream(); int data; w
18、hile(data=inData.read()!=-1)dataArray.write(data); inData.close(); String dataStr=dataArray.toString(); catch(IOException e)System.out.println(e.getMessage(); 字节流字节流 缓冲区流缓冲区流BufferedInputStream和BufferedOutputStream BufferedInputStream类的构造方法和方法:BufferedInputStream(InputStream in):构造一个BufferedInputStr
19、eam。BufferedInputStream(InputStream in, int size):构造一个具有给定的缓冲区大小的BufferedInputStream。int available():得到可以从这个输入流读取的字节数。void close():关闭流。int read():读取数据的字节。int read(byte b, int off, int len):从这个字节输入流的给定偏移量处开始读取字节,存储到给定的字节数组。void reset():将缓冲区重新设置到加标记的位置。long skip(long n):跳过n个字节的数据。BufferedOutputStream类
20、的构造方法和方法:BufferedOutputStream(OutputStream out):构造一个BufferedOutputStream。BufferedOutputStream(OutputStream out, int size):构造一个具有给定的缓冲区大小的BufferedOutputStream。void flush():刷新这个流。void write(byte b, int off, int len):将给定的字节数组写到这个缓冲输出流。void write(int b):将给定的字节写到这个缓冲输出流。 【例8.9】文件拷贝的缓冲改进。 字节流字节流import jav
21、a.io.*;public class Copy public static void main(String args) BufferedInputStream bis=null; BufferedOutputStream bos=null; byte buf=new byte100; try bis=new BufferedInputStream(new FileInputStream(test.txt); bos=new BufferedOutputStream(new FileOutputStream(testcopy.txt); int len=0; while( true ) le
22、n=bis.read(buf); if(len=0) break; bos.write(buf,0,len); bos.flush();/缓冲区只有满时才会将数据输出到输出流,用缓冲区只有满时才会将数据输出到输出流,用flush()将未满的缓冲区中数将未满的缓冲区中数据强制输出据强制输出 catch(Exception e)e.printStackTrace(); finally if(bis != null) try bis.close(); catch(Exception e) e.printStackTrace(); if(bos!= null) try bos.close(); cat
23、ch(Exception e) e.printStackTrace(); 程序运行结果字符流字符流 31ReaderReader和和Writer Writer 32InputStreamReaderInputStreamReader和和OutputStreamWriterOutputStreamWriter 33FileReaderFileReader和和FileWriterFileWriter 34 35BufferedReaderBufferedReader和和BufferedWriterBufferedWriter CharArrayReaderCharArrayReader和和Char
24、ArrayWriterCharArrayWriterWriter和和Reader 以字符流方式向文件写入或从文件中读取数据,可以使用以字符流方式向文件写入或从文件中读取数据,可以使用Writer和和Reader类及其子类。类及其子类。 Writer和和Reader类都是抽象类,不能建立它们的对象,所以只能通过类都是抽象类,不能建立它们的对象,所以只能通过它们子类对象对文件进行操作。常用的它们子类对象对文件进行操作。常用的Writer类的子类包括类的子类包括FileWriter类类和和BufferedWriter类。类。FileWriter类构造方法如下:类构造方法如下:FileWriter(S
25、tring fileName):参数:参数fileName表示带路径的磁盘文件名。表示带路径的磁盘文件名。FileWriter(File file):参数:参数file表示为磁盘文件所建立的表示为磁盘文件所建立的File对象名。对象名。 注:使用注:使用FileWriter进行文件操作时,为了减少磁盘读写次数,常常进行文件操作时,为了减少磁盘读写次数,常常使用具有缓冲功能的使用具有缓冲功能的BufferedWriter类。类。 字符流字符流InputStreamReader和OutputStreamWriter InputStreamReader类的构造方法和方法:InputStreamRea
展开阅读全文