版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVAI/O信息学院计算机系统研究所吴刚信息学馆415行胜于言敢为人先和而不同居安思危1 File类 RandomAccessFile类 I/O流框架体系结构字节流与字符流节点流的I/O操作处理流的I/O操作行胜于言敢为人先和而不同居安思危2 Java I/O包:在java.io包中包括有许多类,用于支持基于数据流的系统输入输出、序列化和文件系统文件是信息的一种组织形式,是存储在外部存储介质上的具有标识名的一组相关信息集合流是指一组有顺序的、有起点和终点的字节集合,是对数据传输的总称或抽象行胜于言敢为人先和而不同居安思危3流的基本概念数据发送端 (生产者)数据接收端 (消费者)流的数据传送缓
2、冲区缓冲区行胜于言敢为人先和而不同居安思危4流:它是通过缓冲机制将数据从生产者(如键盘、磁盘文件、内存或其他设备)传送到接受该数据的消费者(如屏幕、文件或者内存等)的这一过程的抽象。目的是为用户提供与设备无关的输入输出。缓冲区:流的两端都有数据缓冲区可以暂存数据。这样接收端可以不必每时每刻都监视流是否有数据需要接收,数据来到之后放在缓冲区内,等需要时再去读取。而发送端也不必每一个字节都调用发送方法,而是等集中了一定数量的数据后再一起发送,大大提高了效率。行胜于言敢为人先和而不同居安思危5行胜于言敢为人先和而不同居安思危6与I/O相关的类随机文件操作基于字符的输入流基于字节的输入流(抽象)(抽象
3、)基于字节的输出流(抽象)基于字符的输出流(抽象)文件特征与管理行胜于言敢为人先和而不同居安思危7FileWriterOutputStreamObjectInputStreamReaderRandomAccessFile更多参考: .sg/home/ehch ua/programming/java/J5b_IO.html行胜于言敢为人先和而不同居安思危8File类行胜于言敢为人先和而不同居安思危9一个File类的对象表示一个文件,这个文件可能是实际存在的,也可能是不存在的可以通过调用exists()方法判断File对象代表的文件是否实际存在 File类不仅可
4、以代表文件,而且可以代表目录行胜于言敢为人先和而不同居安思危10File类的构造方法 File(StringfileName) File(Stringdir,StringfileName) File(Filedir,StringfileName) File(URIuri)注意:File类没有缺省构造方法行胜于言敢为人先和而不同居安思危11目录分隔符目录分隔符(Directory Separator)是用来在路径中分割目录的,如:Windows 下的,Unix下的/等 Java为了满足跨平台的要求定义了平台无关的目录分隔符 File.separator在不同的平台下File.separator有
5、着不同的值行胜于言敢为人先和而不同居安思危12Filefile1=newFile(/ Windows平台C:tempmyNote.txt);Filefile2=newFile(/ Unix/Linux平台/tmp/myNote.txt);FilemyFile=newFile(C:+File.separator+jdk1.5.0+File.separator, File.java);行胜于言敢为人先和而不同居安思危13File类的方法 booleancreateNewFile()throwsIOException如果文件不存在则创建一个新文件,通过返回值确定调用是否成功,如果文件存在则失败 bo
6、oleanexists()判断文件是否已经存在,文件存在返回true,否则返回false booleandelete()删除文件,通过返回值确定调用是否成功行胜于言敢为人先和而不同居安思危14 booleanmkdir()建立一个新目录,通过返回值确定调用是否成功,如果对象已存在则调用失败 Stringlist()返回File对象指定的目录之下的所有文件的文件名列表,如果File对象不是目录则返回null StringgetPath()返回文件的相对路径,即相对当前目录的路径,即使对象代表的文件不存在行胜于言敢为人先和而不同居安思危15 StringgetAbsolutePath()返回文件对
7、象的绝对路径,即使对象代表的文件不存在 StringgetParent()返回文件所在目录的名字 StringgetName()返回文件名行胜于言敢为人先和而不同居安思危16 booleancanRead()判断文件是否可被读取 booleancanWrite()判断文件是否可以写入 longlastModified()返回一个表示文件最后修改时间的长整数,这个数表示从1970年1月1日0时开始流逝的毫秒数,如果文件不存在则返回0行胜于言敢为人先和而不同居安思危17System.out.println(myFile.getName();/取得文件名称的方法System.out.println(
8、myFile.getPath();/取得文件路径的方法System.out.println(myFile.isAbsolute();/判断文件是否完整System.out.println(myFile.getParent();/取得文件的根目录System.out.println(myFile.exists();/判断文件是否存在System.out.println(myFile.isDirectory();/判断是否是目录System.out.println(myFile.isFile();/判断是否是文件System.out.println(myFile.isHidden();/判断是否是
9、隐藏文件System.out.println(myFile.canRead();/判断是否可读System.out.println(myFile.canWrite();/判断是否可写行胜于言敢为人先和而不同居安思危18File tryf=newFile(e:1.txt);f.createNewFile();catch(Exception e)System.out.println(e.getMessage();System.out.println(Filename:“+f.getName();path:“System.out.println(File+f.getPath();System.out
10、.println(f.exists()?exists: dose not exists);行胜于言敢为人先和而不同居安思危19RandomAccessFile类行胜于言敢为人先和而不同居安思危20 File类不能操作文件内容使用RandomAccessFile既可以读文件,也可以写文件可以在创建时使用参数来设置文件的读写权限 RandomAccessFile有一个文件指示器,可以移动到任意位置对文件进行读写行胜于言敢为人先和而不同居安思危21RandomAccessFile(Filefile,Stringmode)throwsFileNotFoundExceptionRandomAccessF
11、ile(Stringname,Stringmode)throwsFileNotFoundException允许的mode:有时我们需r 以只读方式打开。调用任何write方法都将抛出IOExceptionrw 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件rws 打开以便读取和写入,对于 rw,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。rwd 打开以便读取和写入,对于 rw,还要求对文件内容的每个更新都同步写入到底层存储设备。要以独占的方式访问某个文件,即在打开文件时,对文件 上锁,以防其他人或进程也访问该文22 件行胜于言敢为人先和而不同居安思危 read(by
12、teb)从文件中读取b.length长度的字节到b中 write(byteb)将b写入文件中文件指示器指向的位置 skipBytes(intn)使指示器向后跳过n个字节 seek(longpos)将文件指示器的偏移量设为pos,如: RandomAccessFile.seek(0)是将文件指示器移动到文件开始的位置行胜于言敢为人先和而不同居安思危23RandomAccessFilera=newRandomAccessFile(e:3.txt,rw);Strings=“Hello! n How r u?;ra.write(s.getBytes(); ra.close();RandomAccess
13、Fileraf=newRandomAccessFile(e:3.txt,r);/raf.skipBytes(3); raf.seek(3);String str=;for (int i=0;is.length()-3;i+) str=str+(char)raf.readByte();System.out.println(str); raf.close();行胜于言敢为人先和而不同居安思危24I/O框架的体系结构行胜于言敢为人先和而不同居安思危25 RandomAccessFile 类操作起来比较麻烦所以在Java I/O框架中会提供专门的输入、输出流操作行胜于言敢为人先和而不同居安思危26行胜
14、于言敢为人先和而不同居安思危27字符流与字节流的区别字节流是以字节(8位)为单位进行读写的字符流是以字符(16位)为单位进行读写的字符流采用Unicode编码行胜于言敢为人先和而不同居安思危28用于输入的字节流类都从InputStream继承而来用于输出的字节流类都从OutputStream继承而来用于输入的字符流类都从Reader继承而来用于输出的字符流类都从Writer继承而来可以使用InputStreamReader和OutputStreamWriter将字节流转换为字符流上述类都是抽象超类行胜于言敢为人先和而不同居安思危29行胜于言敢为人先和而不同居安思危30行胜于言敢为人先和而不同居
15、安思危31行胜于言敢为人先和而不同居安思危32按照功能(处理位置)流类可分为两种: 节点流(Node Stream)节点流是最基本的流,可以单独使用,直接提供输入输出功能,不同的节点流用于从不同的地点进行输入输出处理流(Processing Stream)处理流是高级的流,不能单独使用,只能同节点流配合使用,用于增强流的功能。指FilterInputStream和FilterOutputStream及子类。它们分别用InputStream和OutputStream构造行胜于言敢为人先和而不同居安思危33行胜于言敢为人先和而不同居安思危34节点流行胜于言敢为人先和而不同居安思危35用于文件 字节
16、流:FileInputStream,FileOutputStream字符流:FileReader, FileWriter 创建输入流FileInputStream(Filefile)throws FileNotFoundExceptionFileInputStream(Stringname)throws FileNotFoundExceptionFileInputStream(FileDescriptorfdObj)throws FileNotFoundException行胜于言敢为人先和而不同居安思危36 读取数据/从输入流中读取一个数据字节intread()throwsIOExceptio
17、n/从输入流中将最多b.length个字节数据读入byte数组int read (byte b) throws IOException/ 从输入流中将最多len个字节数据读入byte数组int read (byte b, int off, int len)throws IOException 关闭流close()throwsIOException使用流后必须要进行关闭操作行胜于言敢为人先和而不同居安思危37用于内存数组实现类似于内存虚拟文件的功能字节流:ByteArrayInputStream,ByteArrayOutputStream字符流:CharArrayReader,CharArray
18、Writer创建输入流ByteArrayInputStream(bytebuf)ByteArrayInputStream(byte int offset, int length)buf,指定仅使用数组buf中的从offset开始的length个元素作为数据源行胜于言敢为人先和而不同居安思危38创建输出流 ByteArrayOutputStream()创建一个大小为32字节的缓冲区 ByteArrayOutputStream(int)根据参数指定缓冲区的大小,当数据过多时可以自动增长行胜于言敢为人先和而不同居安思危39用于管道 主要用于完成线程之间的通信 字节流:PipedInputStream
19、,PipedOutputStream字符流:PipedReader, PipedWriter PipedInputStream和PipedOutputStream 对象必须进行连接而产生一个通信管道, PipedOutputStream向其中写入数据, PipedInputStream从管道中读出数据 PipedOutputStream.connect(PipedInpu tStream)行胜于言敢为人先和而不同居安思危40原理类似于“生产者-消费者”的功能。管道一侧PipedOutputStream负责生产产品,管道另一侧负责PipedInputStream消耗产品。两侧共享PipedInp
20、utStream的buffer(默认1024字节)。还有两个变量in(生产量)和out(消耗量)。in为-1表示消费完了,in=out表示生产满了。当消费者没东西可消费的时候,也就是当in为-1的时候,消费者会一直等待,直到有东西可消费。行胜于言敢为人先和而不同居安思危41处理流行胜于言敢为人先和而不同居安思危42提供缓冲功能 字节流:BufferedInputStream,BufferedOutputStream字符流:BufferedReader,BufferedWriter为I/O流增加了内存缓冲区,使I/O一次不止操作一个字节,提高性能使得在流上执行skip、mark、reset方法成
21、为可能行胜于言敢为人先和而不同居安思危43 BufferedInputStream(InputStreamin)创建了带有32字节缓冲区的缓冲流 BufferedInputStream in,int size)(InputStream按照指定的大小创建缓冲区 BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out,int size)行胜于言敢为人先和而不同居安思危44FileInputStream=newinFileInputStream(f);BufferedInputStreambin=new
22、BufferedInputStream(in);FileOutputStreamout=newFileOutputStream();BufferedOutputStreambout=newBufferedOutputStream(out);行胜于言敢为人先和而不同居安思危45提供对象的存储和读取(序列化)功能字节流:ObjectInputStream,ObjectOutputStream被存储或读取的对象必须实现Serializable 接口。序列化:将对象转换为连续的字节数据,这些数据在以后仍然可以被还原,且与操作系统无关不能保存和读取transient和static类型的变量,因为序列化只
23、针对类的数据成员。而static是描述类的状态,transient则是暂时变量。行胜于言敢为人先和而不同居安思危46序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。 虽然可以用自己的各种各样的方法来保存对象状态,但是Java提供了一种应该比自己好的保存对象状态的机制,那就是序列化。必须实现Serializable接口或Externalizable接口行胜于言敢为人先和而不同居安思危47什么情况下需要序列化? 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在网络上传送对象的时候; 当你想通过RMI(Remote Method Invocation )传输对象的时候;行胜于言敢为人先和而不同居安思危48提供读写各种数据类型的功能字节流:DataInputStream,DataOutputStream与ObjectInputStream和ObjectOutputStream类似,因为都实现了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医护理在肿瘤科中的应用
- 内江市护士招聘面试题及答案
- 体温过高与脱水预防
- 服务端异常处理和调试技巧
- 集团企业资金管理系统的功能流程与操作方法
- 叙事护理在老年慢性病患者家庭支持中的作用
- 农网配电营业工操作管理模拟考核试卷含答案
- 预拌混凝土生产工操作规范能力考核试卷含答案
- 中医咳嗽敷贴的食疗配合建议
- 2026年美容转租合同(1篇)
- 2025年全国科普日全民科学素质知识竞赛题库(共80题附答案)
- 心电图室质量控制与改进措施范文
- 中建专项施工升降机拆除方案
- 地膜覆盖玉米生产技术玉米
- DB37/T 5252-2023 房屋建筑施工扬尘防治技术规程
- 富士相机FUJIFILM X100T用户手册
- 职校开学第一课课件:谁说职业没前途
- 二氧化氯在肿瘤治疗中的协同作用
- 垃圾清运服务投标方案技术方案
- 海运公司船员合同
- 2024年辽宁化工行业职业技能竞赛(化工总控工赛项)理论考试题库及答案
评论
0/150
提交评论