




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章输入输出流,10.1File类10.2FileInputStream类10.3FileOutputStream类10.4FileReader类和FileWriter类10.5使用文件对话框打开和保存文件10.6RandomAccessFile类,10.7数据流10.8数组流10.9对象流10.10序列化与对象克隆10.11文件锁FileLock10.12Process类中的流10.13带进度条的输入流,I/O流,I/O流提供一条通道程序,可以使用这条通道把源中的字节序列送给目的地。把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。而输出流的指向是字节要去的一个目的地(或用户)
2、,程序通过向输出流中写入数据把信息传递到目的地。虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口。Java的I/O流库提供大量的流类(在包java.io中)。但是,所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类,而所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。,10.1File类,一个File类的对象,表示了磁盘上的文件或目录.File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。构造方法有3个:File(Stringfilename)
3、;File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);常用的方法:canRead(),canWrite()检测文件是否可读可写。,例如:Filef=newFile(“datatemp.dat”);/相对路径Fileg=newFile(“d:javadatatemp.dat”);/绝对路径File类的一些常见方法:StringgetName():返回文件名;StringgetParent():返回文件所在目录名;StringgetPath():返回文件路径;StringgetAbsolutePath():返回绝对
4、路径;booleanexists():文件是否存在;booleancanWrite():文件是否可写、读;,booleanisFile():是否为文件booleanisDirectory():是否为目录;longlastModified():文件的最后修改日期;longlength():返回文件的长度;booleandelete():删除文件或目录。删除成功返回true,否则返回false;booleanmkdir();创建一个目录。目录创建成功,返回true,否则返回false;Stringlist():返回一个代表目录下的所有文件的字符串数组。,例如Filef=newFile(“datat
5、emp.dat”);上述引用变量f调用相应的方法,得到的值:f.getName():返回temp.datf.getParent():返回dataf.getPath():返回datatemp.datf.getAbsolutePath():返回d:javadatatemp.datf.exists():若datatemp.dat文件存在返回true,否则返回false,10.2FileInputStream类,使用文件输入流构造方法建立通往文件的输入流时,可能会出现错误(也被称为异常)。为了把一个文件输入流对象与一个文件关联起来,使用类似于下面所示的代码:tryFileInputStreamins=
6、newFileInputStream(myfile.dat);catch(IOExceptione)System.out.println(Filereaderror:+e);/文件I/O错误,从输入流中读取字节,read方法给程序提供一个从输入流中读取数据的基本方法,read方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0255之间的一个整数),如果到达源的末尾,该方法返回-1。read方法还有其它一些形式。这些形式能使程序把多个字节读到一个字节数组中:intread(byteb);intread(byteb,intoff,intlen);,10.3FileOutputStrea
7、m类,FileOutputStream提供了基本的文件写入能力。构造方法:FileOutputStream(Stringname)FileOutputStream(Filefile)FileOutputStream流使用write方法把字节写入到输出流达到目的地,write的格式如下:publicvoidwrite(byteb)其功能是写b.length个字节到输出流。publicvoid.write(byteb,intoff,intlen)其功能是从给定字节数组中起始于偏移量off处写len个字节到输出流。,10.4FileReader类和FileWriter类,与FileInputStre
8、am、FileOutputStream字节流相对应的是FileReader、FileWriter字符流,他们分别是Reader和Writer的子类,其构造方法分别是:FileReader(Stringfilename),FileWriter(Stringfilename)。由于汉字在文件中占用2个字节,如果使用字节流,读取不当会出现乱码现象,采用字符流就可以避免这个现象,因为,在Unicode字符中,一个汉字被看作一个字符。,10.5使用文件对话框打开和保存文件,使用文件对话框方便地打开和保存文件,因为文件对话框可以使用户很方便的选择文件所在的目录以及文件的名字。,10.6RandomAcce
9、ssFile类,RandomAccessFile类既不是输入流类InputStream类的子类,也不是输出流类OutputStram类的子类流。RandomAccessFile类同时实现了DataInput和DataOutput接口,提供了对文件随机存取的功能,利用这个类可以在文件的任何位置读取或写入数据。RandomAccessFile类提供了一个文件指针,用来标志要进行读写操作的下一个数据的位置。构造方法。(1)RandomAccessFile(Stringname,Stringmode)参数name用来确定一个文件名,给出流的源,同时也是流目的地。参数mode取r(只读)或rw(可读写)
10、决定流对文件的访问权限。(2)RandomAccessFile(Filefile,Stringmode)参数file是一个File对象,给出流的源,同时也是流目的地。参数mode取r(只读)或rw(可读写)决定流对文件的访问权限。,10.7数据流,DataInputStream类和DataOutputStream类创建的对象被称为数据输入流和数据输出流。这两个流是很有用的两个流,它们允许程序按着机器无关的风格读取Java原始数据。也就是说,当我们读取一个数值时,不必再关心这个数值应当是多少个字节。构造方法(1)DataInputStream(InputStreamin)将创建的数据输入流指向一
11、个由参数in指定的输入流,以便从后者读取数据。(2)DataOutputStream(OutnputStreamout)将创建的数据输出流指向一个由参数out指定的输出流,然后通过这个数据输出流把Java数据类型的数据写到输出流out。,10.8数组流,流的源和目标除了可以是文件外,还可以是计算机内存。字节输入流:ByteArrayInputStream和字节输出流:ByteArrayOutputStream分别使用字节数组作为流的源和目标。ByteArrayInputStream流的构造方法构造字节数组输入流对象:ByteArrayInputStream(bytebuf)ByteArrayI
12、nputStream(bytebuf,intoffset,intlength),10.9对象流,ObjectInputStream类和ObjectOutputStream类创建的对象被称为对象输入流和对象输出流。对象输出流使用writeObject(Objectobj)方法将一个对象obj写入输出流送往目的地,对象输入流使用readObject()从源中读取一个对象到程序中。构造方法分别是:ObjectInputStream(InputStreamin),ObjectOutputStream(OutputStreamout)。,Java.io包中InputStream的类层次,Java.io包
13、中OutputStream的类层次,Java.io包中Reader的类层次,Java.io包中Writer的类层次,I/O流的链接,InputStreamChainOutputStreamChain,10.10序列化与对象克隆,将对象转化为字节流保存起来,并在日后还原这个对象,这种机制叫做对象序列化。将一个对象保存到永久存储设备上称为持续性。一个对象要想能够实现序列化,必须实现Serializable接口或Externalizable接口。有时我们想得到对象的一个“复制品”,该复制品的实体是原对象实体的拷贝。复制品实体的变化不会引起原对象实体发生变化,这样的复制品称为原对象的克隆对象或简称克隆
14、。使用对象流很容易得获取一个序列化对象的克隆。我们只需将该对象写入到对象输出流,那么用对象输入流读回的对象一定是原对象的一个克隆。一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。Serializable接口中的方法对程序是不可见的,因此实现该接口的类不需要实现额外的方法,当把一个序列化的对象写入到对象输出流时,JVM就会实现Serializable接口中的方法,将一定格式的文本对象的序列化信息,写入到目的地。,10.11文件锁FileLock,JDK1.4增加了一个FileLock类,该类的对象称做文件锁。RondomAccessFile创建的流在读写文
15、件时可以使用文件锁,那么只要不解除该锁,其它线程无法操作被锁定的文件,使用文件锁的步骤,首先使用RondomAccessFile流建立指向文件的流,该流的读写属性必须是“rw”,例如:RandomAccessFileinput=newRandomAccessFile(Example.java,rw);input流调用方法getChannel()获得一个连接到地层文件的FileChannel对象(信道),例如FileChannelchannel=input.getChannel();信道调用tryLock()或lock()方法获得一个FileLock(文件锁)对象,这一过程也称做对文件加锁,例如:FileLocklock=channel.tryLock();,10.12Process类中的流,Process是java.lang包中的一个类,可以使用该包中的Runtime类调用其静态方法exec得到Process的一个实例,exec方法可以运行一个可执行文件,即启动一个进程,exec方法返回一个Process对象。一个Process对象可以使用方法getErrorStream()获取该进程错误信息的输入流;使用方法getI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药剂学研究方法试题及答案
- 育婴师心理学知识试题及答案
- 药物容器与包装设计的重要性研究试题及答案
- 数学挑战杯试题及答案
- 怎样有效备考卫生管理证书考试试题及答案
- 系统架构设计师考试提升策略题目及答案
- 2024-2025版高中化学专题一物质的分离与提纯课题二用纸层析法分离铁离子和铜离子习题苏教版选修6
- 药剂学的全球化与本地实践探讨试题及答案
- 文化产业管理证书考试能力评估题
- 激光行业发展方向试题及答案
- 2022风电机组吊装施工组织设计
- 2024年全国职业院校技能大赛(植物病虫害防治赛项)考试题库-上(单选题)
- 教育部《中小学德育工作指南》-道德修养手册
- 渣土运输公司安全培训内容
- 奇特的视觉图形 课件 -2023--2024学年浙教版初中美术八年级下册
- 2023年度学校食堂食品从业人员考核试题(附答案)
- 教师资格考试初中信息技术学科知识与教学能力2024年下半年试题及答案解析
- HIV感染产妇分娩母婴阻断演练脚本
- DL∕T 794-2012 火力发电厂锅炉化学清洗导则
- 人教版高中地理必修第二册第二章乡村和城镇
- 新汉语水平口语考试HSK初级样卷真题-
评论
0/150
提交评论