[互联网]Jaa基础8.ppt
《[互联网]Jaa基础8.ppt》由会员分享,可在线阅读,更多相关《[互联网]Jaa基础8.ppt(50页珍藏版)》请在三一文库上搜索。
1、课程名称 Java基础,Java输入输出流(IO),IO,输入/输出(Input/Output)泛指对某个设备或环境(比如硬盘、视频设备、网络主机)进行数据的输入或输出。因为设备和环境的不同,输入/输出的处理在程序设计中实际上是一个很复杂的问题。 对于输入/输出问题,Java将之抽象化为流(Stream)对象来解决。对不同的输入/输出问题,会有相应的流对象提供解决方案。,课堂内容,1,文件 2,java输入输出流(I/O),文件,不同的操作系统,对于文件系统路径的设定是不同的。 例如,在Windows中,可以有如下的路径表示: “C:WorkspaceCSST“ 而在Linux下对应的路径可能
2、会是: “/home/xx/workspace/csst“,路径,Windows的路径设置使用的是“UNC(Universal Naming Convention统一命名规范)路径名”,以“”开头表示硬盘根目录,如果没有用“”开头,则表示相对于当前工作目录的路径。上例中,“C:”是可选的硬盘驱动器设定 可是“Unix-Like系统”却完全没有Windows系统中的“C:”、“D:”这样的“硬盘驱动器”的概念。在“Unix-Like系统”中,设定以“/”开头来表示从“根目录”开始的“绝对路径”。而不以“/”开头,就表示相对于当前工作目录的路径,路径跨平台,对于需要跨平台运行的程序,在设定路径时会
3、遇到系统相容性的问题,java.io.File类提供了一个“抽象的、与系统相独立的”路径表示。给它一个路径字符串,它就会将其转换为与系统无关的“抽象路径表示” 路径可以指向一个 文件 目录 URI(Uniform Resource Identifier),File类,不管是文件还是目录,在Java中都表示为File的实例 当一个File的实例被建立时,它就不能再被改变内容。File实例除了用作一个文件或目录的抽象表示之外,还提供了不少相关的操作方法:可以用它来对文件系统做一些查询与设定的动作,File类中的常见方法,list 由当前File对象的“抽象路径”下的,文件名及文件夹名组成的字符串数
4、组 listFiles File数组 listRoots 静态方法,返回一个由当前系统根目录组成的File数组 getName getParent getPath toString = getPath length 返回当前文件的大小(字节数) isFile isDirectory exists delete,File的使用,示例 File类可以作为文件的抽象表示,不过要对文件进行输入/输出操作,则必须配合其它相关的类来使用,RandomAccessFile类,文件存取通常是循序的,在文件中存取一次,文件上的“文件指针”就会相对于当前位置前进一次。 而如果要在文件中的某个指定区段上进行存取操作
5、,就必须能在文件中随意地移动“文件指针”,这被称作随机存取(Random Access)。而java.io.RandomAccessFile类就可以完成随机存取的任务它的seek方法可以(以字节为单位)设定“文件指针”的位置。,定位,seek方法虽然精确到字节,但要真正做到方便地移动“文件指针”,通常还要在随机存取的文件中固定每笔数据的长度。Java中没有提供一种直接的方法来向文件写入一笔固定长度的数据(在C/C+中就可以用struct实现),所以必须自行设计“固定长度的数据”,各种文件打开方式(mode),“r“ 以“只读”方式打开文件,任何写操作都会导致抛出IOException异常 “r
6、w“ 以“读写”方式打开文件,如果文件不存在,就“尝试”创建一个;如果文件已存在,就用新建的文件覆盖旧的 “rws“ 设备同步 “rwd“ 设备同步,读写文件时有几个必要的流程,打开文件并指定读写方式 在Java中,当实例化一个与文件相关的输入/输出类时,就会进行打开文件的操作。在实例化的同时,要指定文件打开的方式(mode)。从文件中读取或写入数据前都必须打开文件 使用对应的读取/写入方法读写 关闭文件,读写文件时有几个必要的流程,使用对应的读取/写入方法读写 这里使用的通常是一些以read或write开头的方法,对于简单数据类型的文件读写操作来说,常用的方法有:readInt、readCh
7、ar、writeInt、writeChar 关闭文件 文件读写完毕后,必须关闭文件,以释放与流相关的系统资源。对于某些文件存取对象来说,“关闭文件”这个动作意味着将缓冲区(Buffer)中的(剩余)数据全部写入文件如果不做“关闭文件”的操作,某些数据可能因为没有写入文件而丢失,字节流,计算机中的数据最终都是以0和1的方式来存储,如果要在两个装置之间进行数据的存取,当然也是通过0和1这样的“位”来进行。Java中,把数据在“源(比如文件)”和“目的地(比如内存)”之间的流动抽象化为一个“流(Stream)”,在“流”当中流动的就是“位”数据。当然,实际编程时,操作“位数据”的最小单位是字节。 在
8、J2SE中有两个类用来作“流”的抽象表示:java.io.InputStream和java.io.OutputStream,InputStream和OutputStream,InputStream是所有表示“位输入流”的类,的父类,这是一个抽象类继承它的子类要实现其中的抽象方法。InputStream是从“源”设备读取数据的抽象表示。System类中的“标准输入流”静态对象in就是一个InputStream类型的实例。在Java程序开始运行后,in对象会自动打开免备案空间http:/ OutputStream是所有表示“位输出流”的类,的父类,这也是一个抽象类继承它的子类要实现其中的抽象方法。
9、OutputStream是将数据写入“目的”设备的抽象表示。System类中的“标准输出流”静态对象out其类型就是java.io.PrintStream这是OutputStream类的一个子类(OutputStream派生出java.io.FilterOutputStream,java.io.FilterOutputStream再派生出PrintStream类)。在Java程序开始运行后,out对象也会自动打开,read,in对象的read方法一次读取一个字节的数据,并以int类型返回读入的数据(字节的取值范围是0255,这里其实就是返回ASCII码) 示例 一般来说,我们很少直接实现Inp
10、utStream和OutputStream上的方法而是实现它们的子类提供的方法,来进行输入/输出操作,FileInputStream和FileOutputStream,java.io.FileInputStream是InputStream的子类,而java.io.FileOutputStream是OutputStream的子类,这两个类主要用于文件的读写。 当建立一个FileInputStream或FileOutputStream类的实例时,必须指定文件的位置和名称,在实例被建立时,文件的流就会自动开启。如果不再继续使用流了,就必须关闭文件流,以释放与流相关的系统资源,完成文件读写操作,new
11、,可以用一个File对象来构造一个FileInputStream对象或FileOutputStream对象,也可以直接用文件位置字符串指定路径,建立FileInputStream或FileOutputStream对象。比如: FileInputStream file1 = new FileInputStream(new File(args0); FileOutputStream file2 = new FileOutputStream(args1);,append,对于FileOutputStream对象来说,默认会以“新建文件”的方式开启流也就是说,如果指定名称的文件已经存在,则会新建一个文
12、件来覆盖旧的文件。如果不想这么做(而是想以“附加模式”写入文件),则可以在构造FileOutputStream对象时,指定一个boolean类型的参数append,以确定是否采用“附加写入”的方式打开文件,available,FileInputStream对象的available方法会返回(输入流中)还有多少字节可供读取(返回值为int型整数)。 根据不同的重载形式,FileInputStream的read方法既可以一次从文件中读入一个字节(并以int类型返回),也可以一次(将文件中的一块内容)读入一个byte数组。同样,FileOutputStream的write方法既可以一次向文件写入一个
13、字节(参数类型是int),也可以一次向文件写入一个byte数组,buffer,由于byte数组经常在文件读写过程中起到数据中转的作用,所以它往往也被称为“数据缓冲区(Buffer)”。 之所以要建立“数据缓冲区”,是因为硬盘的数据存取速度远低于内存的数据存取速度,因此每次在内存和硬盘之间读、写数据都会显得有点儿“浪费时间”。如果一次一个字节地(在硬盘和内存之间)读、写数据,那时间浪费就太严重了。而有了缓冲区,就可以把内存中的数据集中写入硬盘(减少写入次数),也可以从硬盘集中读取一块数据到内存(减少读取次数),再由程序中的数据结构来按情况处理。总的来说,缓冲区大大提高了文件存取的效率,示例,示例
14、 用命令行参数指定文件名的时候,不能输入带空格的名字。至于文件类型后缀,在Windows系统中,其实只是用来和“默认打开文件”的程序建立关联的一个设置,加与不加并不会影响文件本身的属性,BufferedInputStream和BufferedOutputStream,java.io.BufferedInputStream和java.io.BufferedOutputStream可以为InputStream和OutputStream类的对象增加缓冲区功能 BufferedInputStream的数据成员buf是一个字节数组,默认大小为2048字节。当读取数据源(例如文件)时,BufferedIn
15、putStream会尽量将buf填满。而我们调用BufferedInputStream对象的read方法时,实际上是先从buf中读取数据(而不是直接从硬盘上读取数据)。当buf中的数据不足时,BufferedInputStream会再实现给定的InputStream类型对象的read方法,从指定设备(硬盘)中提取数据(至缓冲区),以便程序继续读取,BufferedOutputStream,BufferedOutputStream的数据成员buf也是一个字节数组,默认为512字节。当调用BufferedOutputStream对象的write方法时,实际上会先将数据写入buf中,当buf被填满时
16、,就会实现给定的OutputStream对象的write方法,将buf中的数据写入目标设备(硬盘) 注意:构造BufferedInputStream类型的实例时,必须给定一个InputStream类型的实例(因为实现BufferedInputStream时,实际上最后要实现InputStream实例)。同样,构造BufferedOutputStream类型的实例时,必须给定一个OutputStream类型的实例(因为实现BufferedOutputStream时,实际上最后也要实现OutputStream实例)免备案空间http:/,示例,为了确保缓冲区中的数据一定被写入目标设备,建议最后执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 互联网 Jaa 基础
链接地址:https://www.31doc.com/p-1998399.html