




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第十一章输入、输出流,Java.io.File类的使用,IO原理,各种流的操作,课程安排,I/O流概述,输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。Jdk提供了包java.io,其中包括一系列的类来实现输入/输出处理。下面我们对java.io包的内容进行概要的介绍,File类,File类定义了一系列与操作系统平台无关的方法来操作文件和目录File的构造方法有3个:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);,File类中常用方法,1文件的属性经常使用File类的下列方法获取文件本身的一些信息:publicStringgetName()获取文件的名字。publicbooleancanRead()判断文件是否是可读的。publicbooleancanWrite()判断文件是否可被写入。publicbooleanexits()判断文件是否存在。publiclonglength()获取文件的长度(单位是字节)。publicStringgetAbsolutePath()获取文件的绝对路径。publicStringgetParent()获取文件的父目录。publicbooleanisFile()判断文件是否是一个正常文件,而不是目录。publicbooleanisDirectroy()判断文件是否是一个目录。publicbooleanisHidden()判断文件是否是隐藏文件。publiclonglastModified()获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数,File类中常用方法,2目录(1)创建目录publicbooleanmkdir()创建一个目录,如果创建成功返回true,否则返回false。(2)列出目录中的文件publicStringlist()用字符串形式返回目录下的全部文件publicFilelistFiles()用File对象形式返回目录下的全部文件。publicStringlist(FilenameFilterobj)用字符串形式返回目录下的指定类型的所有文件。publicFilelistFiles(FilenameFilterobj)用File对象返回目录下的指定类型所有文件。,File类中常用方法,3文件publicbooleancreateNewFile():不存在时创建此文件对象publicbooleandelete():删除文件。如果是目录必须是空才能删除,importjava.io.*;classFileAcceptimplementsFilenameFilterStringstr=null;FileAccept(Strings)str=.+s;publicbooleanaccept(Filedir,Stringname)returnname.endsWith(str);publicclassDemopublicstaticvoidmain(Stringargs)Filedir=newFile(D:/java);/不可写成D:java,可以写成D:java或D/javaFileAcceptacceptCondition=newFileAccept(java);FilefileName=dir.listFiles(acceptCondition);for(inti=0;i0)boo=fileName0.delete();if(boo)System.out.printf(n文件:%s被删除:,fileName0.getName();,示例:显示d:/java文件夹下所有扩展名为.java的文件,并且删除第一个文件。,运行可执行文件,4运行可执行文件首先使用Runtime类声明一个对象,如:Runtimeec;然后使用静态getRuntime()方法创建这个对象:ec=Runtime.getRuntime();ec可以调用exec(Stringcommand)方法打开本地机的可执行文件或执行一个操作。,返回,publicstaticvoidmain(Stringargs)tryRuntimece=Runtime.getRuntime();Filefile=newFile(C:windows,Notepad.exe);ce.exec(file.getAbsolutePath();catch(Exceptione)/.,自动打开window的记事本,流,流(stream)是一个抽象的概念,代表一串数据的集合,当Java程序需要从数据源读取数据时,就需要开启一个到数据源的流。同样,当程序需要输出数据到目的地也需要开启一个流。流的创建是为了更方便处理数据的输入和输出。Java中的流分类:按数据流向分输入流输出流按数据传输单位分字节流字符流按流的功能分节点流过滤流,Java所提供的流类位于java.io包中,分别继承自以下四种抽象流类。,InputStream和OutputStream,InputStream和OutputStream都是以字节为单位的抽象流类InputStream:所有字节输入流类的超类,它以字节为单位从数据源中读取数据。publicabstractintread()throwsIOException:从输入流中读取数据的下一个字节,返回读到的字节值。若遇到流的末尾,返回-1。publicintread(byteb)throwsIOException:从输入流中读取b.length个字节的数据并存储到缓冲区数组b中,返回的是实际读到的字节数。publicintread(byteb,intoff,intlen)throwsIOException:读取len个字节的数据,并从数组b的off位置开始写入到这个数组中。publicvoidclose()throwsIOException:关闭此输入流并释放与此流关联的所有系统资源。,InputStream和OutputStream,OutputStream:所有字节输出流的超类,它以字节为单位向数据源写出数据。publicabstractvoidwrite(intb)throwsIOException:将指定的字节写入此输出流。publicvoidwrite(byteb)throwsIOException:将b.length个字节从指定的byte数组写入此输出流publicvoidwrite(byteb,intoff,intlen)throwsIOException:将指定byte数组中从偏移量off开始的len个字节写入此输出流publicvoidflush()throwsIOException:刷新此输出流,并强制写出所有缓冲的输出字节。publicvoidclose()throwsIOException:关闭此输出流,并释放与此输出流有关的所有系统资源。,Reader和Writer,Reader和Writer都是以字符为单位的抽象流类Reader:字符输入流的超类,以字符为单位从数据源中读取数据。publicintread()throwsIOException:读取单个字符,返回作为整数读取的字符,若遇到流的末尾,返回-1。publicintread(charc)throwsIOException:将字符读入数组,返回读取的字符数。publicabstractintread(charc,intoff,intlen)throwsIOException:读取len个字符的数据,并从数组c的off位置开始写入到这个数组中。publicabstractvoidclose()throwsIOException:关闭此输入流并释放与此流关联的所有系统资源。,Reader和Writer,Writer:字符输出流的超类,它以字符为单位向数据源写出数据。publicvoidwrite(intc)throwsIOException:写入单个字符。publicvoidwrite(charc)throwsIOException:写入字符数组publicabstractvoidwrite(charb,intoff,intlen)throwsIOExceptionpublicvoidwrite(Stringstr)throwsIOException:写入字符串publicvoidwrite(Stringstr,intoff,intlen)throwsIOExceptionpublicabstractvoidflush()throwsIOExceptionpublicabstractvoidclose()throwsIOException,文件流,文件流是指那些专门用于操作数据源中的文件的流,主要有FileInputStream、FileOutStream、FileReader、FileWriter四个类。FileInputStream和FileOutputStream是以字节为操作单位的文件输入流和文件输出流。利用这两个类可以对文件进行读写操作。用来操作二进制文件比较合适,如图片,声音,视频等。FileReader和FileWriter是以字符为操作单位的文件输入流和文件输出流。常用来操作字符文本文件。,FileInputStreamfin=null;try/step1:创建一个连接到指定文件的FileInputStream对象fin=newFileInputStream(D:IOTestsource.txt);System.out.println(可读取的字节数:+fin.available()+字节);/step2:读数据:一次读取一个字节的数据,返回的是读到的字节.inti=fin.read();while(i!=-1)/若遇到流的末尾,会返回-1System.out.print(char)i);i=fin.read();/再读catch(FileNotFoundExceptione)e.printStackTrace();catch(IOExceptione)/捕获IO异常e.printStackTrace();finally/step3:关闭输入流tryif(null!=fin)fin.close();catch(IOExceptione)e.printStackTrace();,示例:用FileInputStream类读取d:iotestsource.txt文件中数据。,输出结果中文出现乱码,是因为在Unicode编码中,一个英文字符是用一个字节编码的,而一个中文字符则是用两个字节编码的。,source.txt文件内容:,控制台输出结果:,FileOutputStreamout=null;try/step1:创建一个向指定名的文件中写入数据的FileOutputStream/第二个参数设置为true表示:使用追加模式添加字节out=newFileOutputStream(D:IOTestdest.txt,true);/step2:写数据out.write(#);out.write(helloWorld.getBytes();out.write(你好.getBytes();/step3:刷新此输出流out.flush();catch(FileNotFoundExceptione)e.printStackTrace();catch(IOExceptione)/捕获IO异常e.printStackTrace();finallyif(out!=null)tryout.close();/step4:关闭输出流catch(IOExceptione)e.printStackTrace();,示例:使用FileOutputStream类往指定文件中写入数据。,用字节文件输出流往文件中写入的中文字符没有乱码。这是因为程序先把中文字符转成了字节数组然后再向文件中写入(“你好”.getBytes()。,运行结果,在d:iotest下生成一个文件dest.txt,内容如下:,FileReaderfr=null;FileWriterfw=null;intc=0;try/step1:创建IO流对象fr=newFileReader(d:IOTestsource.txt);fw=newFileWriter(d:IOTestdest2.txt);while(c=fr.read()!=-1)/从源文件中读取字符fw.write(c);/往目标文件中写入字符fw.flush();/刷新输出流catch(FileNotFoundExceptione)e.printStackTrace();catch(IOExceptione)e.printStackTrace();finally/省略关闭所有的IO流对象,示例:使用FileReader和FileWriter实现字符文本文件复制功能。,FileReader和FileWriter是以字符为操作单位的文件输入流和文件输出流。用来操作字符文本文件不会出现乱码。,为了提高读取和写入数据的效率,可以使用一次读取一个字节数组和一次写入一个字节数组的方法。intlength=0;charcbuf=newchar8192;/一次性读取指定字符数组长度的数据while(length=fr.read(cbuf)!=-1)/一次性写入指定字符数组指定位置的数据fw.write(cbuf,0,length);,IO流类操作文件一般步骤,第1步:创建连接到指定数据源的IO流对象第2步:利用IO流类提供的方法进行数据的读取或写入。在整个操作过程中,都需要处理java.io.IOException异常。另外,如果是向输出流写入数据,还需要在写入操作完成后,调用flush()方法来强制写出所有缓冲的数据第3步:操作完毕后,一定要调用close()方法关闭该IO流对象。,缓冲流,为了提高数据读写的速度,JavaAPI提供了带缓冲功能的流类,在使用这些带缓冲功能的流类时,它会创建一个内部缓冲区数组。在读取字节或字符时,会先把从数据源读取到的数据填充该内部缓冲区,然后再返回;在写入字节或字符时,会先把要写入的数据填充该内部缓冲区,然后一次性写入到目标数据源中。缓冲流都属于过滤流,也就是说缓冲流不直接操作数据源,而是对直接操作数据源的节点流做一个包装,以此增强它的功能。BufferedInputStream和BufferedOutputStream:针对字节的缓冲输入和输出流BufferedReader和BufferedWriter:针对字符的缓冲输入和输出流,BufferedReaderbr=null;BufferedWriterbw=null;trybr=newBufferedReader(newFileReader(d:IOTestsource.txt);bw=newBufferedWriter(newFileWriter(d:IOTestdestBF.txt);Stringstr=null;while(str=br.readLine()!=null)/一次读取字符文本文件的一行字符bw.write(str);/一次写入一行字符串bw.newLine();/写入行分隔符bw.flush();/刷新缓冲区catch(IOExceptione)e.printStackTrace();finally/step3:关闭IO流对象tryif(null!=bw)bw.close();catch(IOExceptione)e.printStackTrace();/br关闭同bw一样,示例:使用缓冲流实现字符文本文件复制功能。,关闭过滤流时,会自动关闭它所包装的底层节点流,所以无须再关闭节点流了。,创建缓冲流对象:它是过滤流,是对节点流的包装。,数据流,DataInputStream和DataOutputStream,数据流,用来读取和写出基本数据类型的数据。DataInputStream类中的方法publicfinalbooleanreadBoolean()publicfinalbytereadByte()publicfinalcharreadChare().DataInputStream类中与以read方法都有对应的writer方法,见JavaSEAPI,DataOutputStreamdos=null;try/创建连接到指定文件的数据输出流对象dos=newDataOutputStream(newFileOutputStream(d:IOTestdestData.dat);dos.writeUTF(ab中国);/写UTF字符串dos.writeBoolean(false);/写入布尔值dos.writeLong(1234567890L);/写入长整数System.out.println(写文件成功!);catch(IOExceptione)e.printStackTrace();finally/关闭流对象tryif(null!=dos)dos.close();/关闭过滤流时,会自动关闭它包装的底层节点流catch(IOExceptione)e.printStackTrace();,示例:使用数据源写文件,在d:iotest目录下产生一个”destData.dat”的文件,文件中的内容需要通过DataInputStream读出。,对象流,ObjectInputStream类和ObjectOutputStream类:用于存储和读取基本类型数据或对象的过滤流,它最强大之处就是可以把Java中的对象写到数据源中,也能把对象从数据源中还原回来。用ObjectInputStream类保存基本数据类型或对象的机制叫序列化,用ObjectOutputStream读基本数据类型或对象的机制叫反序列化。能被序列化的对象所对应的类必须关现java.io.Serizlizable接口,序列化和反序列化,/*可序列化的POJO*/publicclassStudentimplementsjava.io.SerializableprivatestaticfinallongserialVersionUID=6858255444765880074L;privateintid;privateStringname;privatetransientintage;/不需要序列化的属性publicStudent()publicStudent(intid,Stringname,intage)this.id=id;=name;this.age=age;publicintgetId()returnid;publicStringgetName()returnname;publicintgetAge()returnage;publicStringtoString()returnid=+id+,name=+name+,age=+age;,可序列化的Student类,序列化和反序列化,ObjectOutputStreamoos=null;try/创建连接到指定文件的对象输出流实例oos=newObjectOutputStream(newFileOutputStream(D:IOTestobjectSeri.dat);oos.writeObject(newStudent(101,张三,22);/把stu对象序列化到文件中oos.flush();/刷新输出流System.out.println(序列化成功!);catch(IOExceptione)e.printStackTrace();finallytryif(null!=oos)oos.close();/关闭输出流实例catch(IOExceptione)e.printStackTrace();,创建一个学生对象,序列化到objectSeri.dat中,序列化和反序列化,ObjectInputStreamois=null;try/创建连接到指定文件的对象输入流实例ois=newObjectInputStream(newFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省武威市、嘉峪关市、临夏州中考地理真题含答案
- 甲醇中试平台建设的技术路线与工艺选择分析
- 加强党组织在学校治理中的核心引领作用
- 物管公司行政管理制度
- 物资仓库安全管理制度
- 物资设备报废管理制度
- 特效玩具卫生管理制度
- 特殊教育物品管理制度
- 特殊病人预警管理制度
- 特殊药品运输管理制度
- 前程无忧测评题库及答案
- 医疗纠纷处理有关法律问题讲座(医生)
- 划船休闲体育活动策划
- 信息类文本阅读(信息的概括) 基础练 2025年高考语文一轮复习备考
- 老年科人文关怀护理
- 物业中秋博饼活动方案
- 中考生物基础知识填空含答案
- 广东省深圳市2024年中考英语真题(含答案)
- 叙事护理学智慧树知到答案2024年中国人民解放军海军军医大学
- 2024小学语文教学及说课课件:六年级上册《只有一个地球》
- 2023年甘肃兰州中考满分作文《唤起心中的勇敢》
评论
0/150
提交评论