下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第1章 Java IO系统

第1章 Java IO系统.ppt

第1章 Java IO系统

liulanggu_1mpvi
2012-03-28 0人阅读 举报 0 0 暂无简介

简介:本文档为《第1章 Java IO系统ppt》,可适用于高等教育领域

第一章JavaIO系统本章相关词汇本章相关词汇本章目标本章目标复习IO包强化区分字符字节的区别运用FileInputStream类和FileOutputStream类完成复制文件的功能运用FileReader类和FileWriter类配合BufferedReader类和BufferedWriter类来进行字符的读取和写入功能运用InputStreamReader类和BufferedReader类来完成控制台输入的功能清楚PrintWriter类的使用方式javaio包简介javaio包简介javaio包也是Java内置的包其中包含一系列对文件和目录的属性进行操作对文件进行读写操作的类程序中如果要使用到该包中的类对文件或流进行操作则必须显式地声明如下语句:importjavaio*文件文件什么是文件?文件可以认为是相关记录或存放在一起的数据的集合文件一般是存放在磁盘上的例如:硬盘、软盘和光盘等等。File类File类File类的对象不但可以表示文件还可以表示目录在程序中一个File类对象可以代表一个文件或目录当创建一个文件对象后就可以利用它来对文件或目录的属性进行操作如:文件名、最后修改日期、文件大小等等需要注意的是File对象并不能直接对文件进行读写操作只能查看文件的属性File类的构造方法File类的构造方法File类的构造方法有种重载方式常用的如下:如:在当前目录下创建一个与aaatxt文件名相关联的文件对象Filef=newFile("aaatxt")指明详细的路径以及文件名请注意双斜线Filef=newFile("D:JavaHellojava")File类中的常用方法File类中的常用方法File类示例File类示例publicclassFileDemo{publicstaticvoidmain(Stringargs){创建一个文件对象使之与一个文件关联Filefile=newFile("testtxt")显示与文件有关的属性信息Systemoutprintln("文件或目录是否存在:"fileexists())Systemoutprintln("是文件吗:"fileisFile())Systemoutprintln("是目录吗:"fileisDirectory())Systemoutprintln("名称:"filegetName())Systemoutprintln("绝对路径:"filegetAbsolutePath())Systemoutprintln("最后修改时间:"filelastModified())Systemoutprintln("文件大小:"filelength())}}stream(流)stream(流)流是指一连串流动的数据信号是以先进先出的方式发送和接收数据的通道。InputStream来自数据源的数据流OutputStream流向目的地的数据流流(续)流(续)流的类型流的类型根据流动方向的不同流分为输入流和输出流对于输入和输出流由于传输格式的不同又分为字节流和字符流:字节流是指位的通用字节流以字节为基本单位在javaio包中对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和OutputStream(输出字节流)类字符流是指位的Unicode字符流以字符(两个字节)为基本单位非常适合处理字符串和文本对于字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类。使用FileInputStream类读文件使用FileInputStream类读文件FileInputStream类称为文件输入流继承于InputStream类是进行文件读操作的最基本类它的作用是将文件中的数据输入到内存中我们可以利用它来读文件由于它属于字节流因此在读取Unicode字符(如中文)的文件时可能会出现问题。FileInputStream类的构造方法FileInputStream类的构造方法FileInputStream类的构造方法有种重载方式以下是常用的几种。FileInputStream类的常用方法FileInputStream类的常用方法FileInputStream对象读文件示例FileInputStream对象读文件示例publicclassFileInputStreamDemo{publicstaticvoidmain(Stringargs){try{Filefile=newFile("testtxt")创建文件对象使用文件对象创建文件输入流对象相当于打开文件FileInputStreamfis=newFileInputStream(file)for(inti=i<filelength()i){charch=(char)(fisread())循环读取字符Systemoutprint(ch)}Systemoutprintln()fisclose()关闭流}catch(FileNotFoundExceptionfnfe){Systemoutprintln("文件打开失败。")}catch(IOExceptionioe){ioeprintStackTrace()}}}FileInputStream对象读文件示例FileInputStream对象读文件示例publicclassFileInputStreamDemo{publicstaticvoidmain(Stringargs){try{Filefile=newFile("testtxt")创建文件对象FileInputStreamfis=newFileInputStream(file)根据文件的字节长度创建字节数组bytebuf=newbyte(int)(filelength())fisread(buf)读取文件中的数据存放到字节数组中Stringstr=newString(buf)利用字节数组创建字符串Systemoutprintln(str)打印字符串fisclose()关闭流}catch(FileNotFoundExceptionfnfe){Systemoutprintln("文件打开失败。")}catch(IOExceptionioe){ioeprintStackTrace()}}}使用FileOutputStream类写文件使用FileOutputStream类写文件FileOutputStream类称为文件输出流继承于OutputStream类是进行文件写操作的最基本类它的作用是将内存中的数据输出到文件中我们可以利用它来写文件。FileOutputStream类的构造方法FileOutputStream类的构造方法FileOutputStream类的构造方法有种重载方式以下是常用的几种。FileOutputStream类的常用方法FileOutputStream类的常用方法FileOutputStream对象写文件示例FileOutputStream对象写文件示例publicclassFileOutputStreamDemo{在函数内部不进行异常处理将异常抛出函数外部publicstaticvoidmain(Stringargs)throwsIOException{Stringstr="Helloworld!"Filefile=newFile("testtxt")创建文件对象通过文件对象创建文件输出流对象附加第二个参数true指定进行文件追加默认为不追加FileOutputStreamfos=newFileOutputStream(file,true)逐个将字符写入到文件中for(inti=i<strlength()i){foswrite(strcharAt(i))}fosclose()关闭流}}FileOutputStream对象写文件示例FileOutputStream对象写文件示例publicclassFileOutputStreamDemo{在函数内部不进行异常处理将异常抛出函数外部publicstaticvoidmain(Stringargs)throwsException{Stringstr="ILoveJava"通过文件名创建文件输出流对象FileOutputStreamfos=newFileOutputStream("testtxt")将字符串转化为字节数组bytebuffer=strgetBytes()将字节数组中包含的数据一次性写入到文件中foswrite(buffer)关闭流fosclose()}}FileInputStreamFileOutputStream小结FileInputStreamFileOutputStream小结FileInputStream类和FileOutputStream类是成对出现的一个进行输入(读文件)操作一个进行输出(写文件)操作由于采用字节方式进行数据传输不必考虑数据的格式问题这两个类对文件操作的效率较高可以使用这两个类完成复制文件的操作。复制文件示例复制文件示例publicclassCopyFileDemo{publicstaticvoidmain(Stringargs)throwsIOException{FilesrcFile=newFile("srcdat")源文件对象FiledestFile=newFile("destdat")目标文件对象if(!(destFileexists())){判断目标文件是否存在destFilecreateNewFile()如果不存在则创建新文件}使用源文件对象创建文件输入流对象FileInputStreamfis=newFileInputStream(srcFile)使用目标文件对象创建文件输出流对象FileOutputStreamfos=newFileOutputStream(destFile)bytebuf=newbyte创建字节数组作为临时缓冲Systemoutprintln("开始复制文件")while(fisread(buf)!=){循环从文件输入流中读取数据foswrite(buf)写入到文件输出流中}Systemoutprintln("文件复制成功!")fisclose()关闭流fosclose()}}字符流字符流FileInputStram类和FileOutputStream类虽然可以高效率地读写文件但对于Unicode编码的文件使用它们有可能出现乱码考虑到Java是跨平台的语言要经常操作Unicode编码的文件使用字符流操作文件是有必要的使用字符流将涉及到以下个类:FileReader类和FileWriter类BufferedReader类和BufferedWriter类。FileReader类FileReader类FileReader类称为文件读取流允许以字符流的形式对文件进行读操作其构造方法有种重载方式以下是常用的几种:该类将从文件中逐个地读取字符效率比较低下因此一般将该类对象包装到缓冲流中进行操作。BufferedReader类BufferedReader类BufferedReader类主要为字符流提供缓冲以提高效率其构造方法有种重载方式以下是常用的几种:以下是BufferedReader类的常用方法:FileReader配合BufferedReader读文件示例FileReader配合BufferedReader读文件示例publicclassRraderDemo{publicstaticvoidmain(Stringargs)throwsIOException{Filefile=newFile("testtxt")通过文件对象创建文件读取流对象FileReaderfr=newFileReader(file)将文件读取流包装成缓冲读取流BufferedReaderbr=newBufferedReader(fr)Stringstrwhile((str=brreadLine())!=)逐行读取数据{Systemoutprintln(str)}brclose()关闭流frclose()关闭流}}FileWriter类FileWriter类FileWriter类称为文件写入流以字符流的形式对文件进行写操作其构造方法有种重载以下是常用的几种:与FileReader类相似FileWriter类同样需要使用缓冲流进行包装。BufferedWriter类BufferedWriter类BufferedWriter类可以为FileWriter类提供缓冲其构造方法有种重载方式以下是常用的几种:以下是BufferedWriter类的常用方法:FileWriter配合BufferedWriter写文件示例FileWriter配合BufferedWriter写文件示例publicclassWriterDemo{publicstaticvoidmain(Stringargs)throwsIOException{Filefile=newFile("testtxt")通过文件对象创建文件输出字符流对象FileWriterfw=newFileWriter(file)将文件输出字符流包装成缓冲流BufferedWriterbw=newBufferedWriter(fw)bwwrite("大家好!")bwwrite("我正在学习Java。")bwnewLine()换个新行bwwrite("请多多指教。")bwnewLine()换新行bwwrite("Luckybugcncom")bwclose()关闭流fwclose()关闭流}}PrintWriter类PrintWriter类PrintWriter类称为打印写入流向文本输出流打印对象的格式化表示形式它能够用于将字节的输出流转成字符的输出流。其构造方法有种重载以下是常用的几种:PrintWriter类的常用方法PrintWriter类的常用方法javaioPrintWriterjavaioPrintWriterPrintWriter是字符输出流它提供格式化的输出功能由于构造方法的支持允许将字节流转化成字符流的形式它的构造方法共有种重载以下是常用的几种:PrintWriter的常用方法PrintWriter的常用方法PrintWriter使用注意事项PrintWriter使用注意事项PrintWriter可以不配合BufferedWriter类一起使用。如果启用了自动刷新则只有在调用println、printf或format的其中一个方法时才可能完成此操作否则不能完成自动刷新的功能。从控制台接受输入从控制台接受输入Systemin的read方法可以从控制台接受输入但由于in实际上是一个InputStream类的对象它只能以字节形式接收数据并且一次只能接受一个字节这使输入操作很不便必须将Systemin进行处理才可以顺利地从控制台接受输入这将使用到:InputStreamReader类BufferedReader类转换和包装Systemin转换和包装SysteminInputStreamReader类用于将InputStream类型的字节输入流对象转换成Reader类型的字符读取流对象其构造方法有种重载方式常用的如下:可以使用它来转换Systemin如:InputStreamReaderisr=newInputStreamReader(Systemin)这样的字符流效率很低再使用BufferedReader类来为其建立缓冲如:BufferedReaderbr=newBufferedReader(isr)这样就可以从控制台接受输入了。从控制台接受输入示例从控制台接受输入示例publicclassConsoleInputDemo{publicstaticvoidmain(Stringargs)throwsIOException{将Systemin转化成字符流对象InputStreamReaderisr=newInputStreamReader(Systemin)用缓冲流进行包装BufferedReaderbr=newBufferedReader(isr)Systemoutprintln("请输入您的姓名:")Stringname=brreadLine()接受输入Systemoutprintln("请输入您的年龄:")intage=IntegerparseInt(brreadLine())接受输入Systemoutprintln("您的姓名:"name)Systemoutprintln("您的年龄:"age)brclose()关闭流isrclose()关闭流}}从控制台输入并写入到文件示例从控制台输入并写入到文件示例*本例从控制台接受输入然后写入到文件中直到用户输入"!!!"为止*Filefile=newFile("inputtxt")创建文件对象if(!fileexists())判断该文件是否存在如果不存在则创建新文件{filecreateNewFile()}FileWriterfr=newFileWriter(file)针对文件对象创建文件写入流对象BufferedWriterbw=newBufferedWriter(fr)为文件写入流建立缓冲流将控制台输入对象转化成字符流并建立缓冲流BufferedReaderbin=newBufferedReader(newInputStreamReader(Systemin))Stringstr=binreadLine()接受从控制台输入的一行字符串while(!(strequals("!!!")))如果输入"!!!"则代表输入结束{bwwrite(str)将从控制台输入的字符串写入到文件中bwnewLine()换新行str=binreadLine()再从控制台接受输入}关闭所有已经打开的流bwclose()frclose()binclose()对象的序列化对象的序列化将对象转换为字节流保存起来并在日后还原这个对象这种机制叫做对象序列化。序列化的过程就是对象写入字节流和从字节流中读取对象java对象序列化不仅保留一个对象的数据而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深克隆”即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。 一个对象要想能够实现序列化必须实现Serializable接口Java引入对象串行化上是为了实现两个特性:JavaBeans和RMI对象序列化对象序列化当一个对象被序列化时只保存对象的非静态成员变量不能保存任何的成员方法和静态的成员变量。如果一个对象的成员变量是一个对象那么这个对象的数据成员也会被保存。如果一个可序列化的对象包含对某个不可序列化的对象的引用那么整个序列化操作将会失败并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient那么对象仍然可以序列化。NIO缓冲器Buffer类NIO缓冲器Buffer类新IO通过使用Buffer读写数据避免了资源浪费。Buffer对象是线性的有序的数据集合。每个Buffer有以下的属性NIO缓冲器Buffer类NIO缓冲器Buffer类Buffer提供了改变以上三个属性的方法NIO通道Channel接口NIO通道Channel接口Channel表现了一个可以进行IO操作的通道(比如通过FileChannel我们可以对文件进行读写操作)。javaniochannels包含了文件系统和网络通讯相关的channel类。这个包通过Selector和SelectableChannel这两个类还定义了一个进行异步(nonblocking)IO操作的API这对需要高性能IO的应用非常重要。Channel中只有两个方法:isOpen():判断此通道是否处于打开状态。close():关闭此通道NIO字符集Charset类NIO字符集Charset类JavaniocharsetCharset处理了字符转换问题。。此类定义了用于创建解码器和编码器以及获取与charset关联的各种名称的方法它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。NIO选择器Selector类NIO选择器Selector类在过去的阻塞IO中我们一般知道什么时候可以向stream中读或写因为方法调用直到stream准备好时返回。但是使用非阻塞通道我们需要一些方法来知道什么时候通道准备好了。在NIO包中设计Selector就是为了这个目的。SelectableChannel可以注册特定的事件而不是在事件发生时通知应用通道跟踪事件。然后当应用调用Selector上的任意一个selection方法时它查看注册了的通道看是否有任何感兴趣的事件发生。附录:IO流的继承体系附录:IO流的继承体系字节输入流附录:IO流的继承体系附录:IO流的继承体系附录:IO流的继承体系附录:IO流的继承体系附录:IO流的继承体系附录:IO流的继承体系WriterBufferedWriter字符输出流CharArrayWriterStringWriterPipedWriterPrintWriterOutputStreamWriterFileWriter总结总结javaio包是Java内置的包其中包含一系列对输入输出进行操作的类File类的对象可以访问文件(或目录)的属性但不可以进行读写操作从方向上讲流分为输入流和输出流但从格式上区分的话流分为字节流和字符流使用FileInputStream类和FileOutputStream类以字节流方式对文件进行读写操作这是操作文件最基本的两个类总结总结FileReader类和FileWriter类配合BufferedReader类和BufferedWriter类可以以字符流方式对文件进行读写操作从控制台接受输入要使用到InputStreamReader类和BufferedReader类PrintWriter能够自动刷新并且通过print和println方法输出各种不同的数据绝大部分的IO操作都可能抛出IOException。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/53

第1章 Java IO系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利