




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-712本章总体纲要本章总体纲要 文件与数据流简介文件与数据流简介 输入流与输出流输入流与输出流 随机访问文件随机访问文件 读写器读写器 文件文件3 文件文件 可以用来长期保存大量的数据可以用来长期保存大量的数据 在程序结束后仍能长期在程序结束后仍能长期(永久永久)存在存在 文件一般位于副存储设备上文件一般位于副存储设备上 硬盘硬盘 光盘光盘 磁带磁带 保存在变量或数组中的数据是临时性数据保存在变量或数组中的数据是临时性数据 当程序结束时一般就会丢失当程序结束时一般就会丢失文件与数据流简介文件与数据流简介4文件与数据流简介文件与数据流简介 Java语言将语言将文件文件 看作字节或字
2、符序列的集合。看作字节或字符序列的集合。 Java语言提供了丰富的处理文件等的类这些类主要位于语言提供了丰富的处理文件等的类这些类主要位于包包 java.io 中中 包包 java.io 两个主要数据类两个主要数据类 输入输入: java.io.InputStream 输出输出: java.io.OutputStream 两个主要的读写器类两个主要的读写器类: 读入读入: java.io.Reader 写出写出: java.io.Writer5 数据流数据流是一系列的数据是一系列的数据 例如例如: System.in、System.out或或 System.err 所处理的对象是数据流所处理的
3、对象是数据流 System.in - 标准输入标准输入 (从键盘从键盘) System.out 标准输出标准输出 (到屏幕到屏幕) System.err 标准错误输出标准错误输出 (到屏幕到屏幕) 可以重新定向可以重新定向 (例如例如: 将从键盘改为从数据将从键盘改为从数据文件文件)文件与数据流简介文件与数据流简介6 处理数据流的核心思想处理数据流的核心思想 通过循环处理每个数据单元,直到遇到结束符或出通过循环处理每个数据单元,直到遇到结束符或出现例外现例外(Exception) 结束符结束符 在在Unix操作系统下操作系统下, 键入键入Ctrl-D表示数据流的结表示数据流的结束束 在在Win
4、dows操作系统下操作系统下, 键入键入Ctrl-Z表示数据流的表示数据流的结束结束文件与数据流简介文件与数据流简介7 Java所有的所有的I/O机制都是基于数据流的,这些数据流表示了机制都是基于数据流的,这些数据流表示了字符或者字节数据的流动序列。字符或者字节数据的流动序列。 Java的的I/O流提供了读写数据的标准方法。流提供了读写数据的标准方法。 Java.io是大多数面向数据流的输入是大多数面向数据流的输入/输出类的主要软件包。输出类的主要软件包。 Java.io InputStream OutputStream 所有其它面象数据流的输入所有其它面象数据流的输入/输出类都要扩展这两个基
5、类输出类都要扩展这两个基类文件与数据流简介文件与数据流简介8关于数据流的类关于数据流的类 BufferedInputStream BufferedOutputStream DataInputStream DataOutputStream FileInputStream FileOutputStream 9本章总体纲要本章总体纲要 文件与数据流简介文件与数据流简介 输入流与输出流输入流与输出流 Reader 和和 Writer 类类 File10输入流与输出流输入流与输出流 输入流输入流 将数据从文件、标准输入或其他外部将数据从文件、标准输入或其他外部设备输入加载到内存设备输入加载到内存 输出流
6、输出流 将内存中的数据保存到文件中,或传将内存中的数据保存到文件中,或传输给输出设备输给输出设备11InputStream类类类类java.io.InputStream 是一个抽象是一个抽象(abstract)类,声明了类,声明了从原始字节数据流读入数据的基本方法从原始字节数据流读入数据的基本方法类中声明的方法类中声明的方法:public abstract int read() throws IOException public int read(byte data) throws IOException public int read(byte data, int offset, int l
7、ength) throws IOException public long skip(long n) throws IOException public int available() throws IOException public void close() throws IOException public void reset() throws IOException 12read( )方法方法 public abstract int read() throws IOException 从当前输入流中读取数据的下一个字节。从当前输入流中读取数据的下一个字节。 返回的字节值返回的字节值是
8、在是在 0 到到 255 范围内的一个范围内的一个 int 数。如果已读到流的数。如果已读到流的末尾,没有再可读的字节时,则返回末尾,没有再可读的字节时,则返回 -1。 该方法将一该方法将一直阻塞,直到有输入数据、检测到了数据流尾或抛出异直阻塞,直到有输入数据、检测到了数据流尾或抛出异常。常。 子类必须提供当前方法的一个实现。子类必须提供当前方法的一个实现。 返回值:数据的下一个字节;如果已读到流尾,则为返回值:数据的下一个字节;如果已读到流尾,则为 -1。 抛出抛出 IOException :如果发生某个:如果发生某个 I/O 错误。错误。 书书P201 例题例题13available( )
9、方法方法 给出可以读入的字节数给出可以读入的字节数 这样在读数据之前就知道可以读入的字节数这样在读数据之前就知道可以读入的字节数 java.io.InputStreampublic int available() throws IOException14close()方法方法 public void close() throws IOException 关闭当前输入流,并释放与它相关的任一系统资关闭当前输入流,并释放与它相关的任一系统资源。源。 InputStream 的的 close 方法不做任何事。方法不做任何事。 抛出:抛出: IOException 如果发生某个如果发生某个 I/O 错
10、误。错误。 15FileInputStream类类 FileInputStream是从是从InputStream中继承下来的,用于从中继承下来的,用于从指定的文件中提取。指定的文件中提取。 FileInputStream中特殊的方法:中特殊的方法:getFD(),该方法用于获,该方法用于获取文件句柄(实际上是文件描述类的实例),使用方法如下:取文件句柄(实际上是文件描述类的实例),使用方法如下:FileInputStream aFIS = new FileInputStream(aFileName);FileDescriptor myFD = aFIS.getFD(); 如要重新打开该文件:如
11、要重新打开该文件: FileInputStream aFIS = new FileInputStream(myFD) 例题例题:P20316OutputStream类类 与与 InputStream相似,相似,OutputStream 也是也是abstract 类类 类中的成员方法类中的成员方法:public abstract void write(int b) throws IOException public void write(byte data) throws IOException public void write(byte data, int offset, int lengt
12、h) throws IOException public void flush( ) throws IOExceptionpublic void close( ) throws IOException 书书P204 例题例题17Write()方法()方法 write方法与方法与InputStream的的read方法相对应,它有方法相对应,它有三个形态:三个形态:(1) write(byte):将指定:将指定byte数组中的数据输出到数组中的数据输出到指定指定Stream;(2) write(byte,int,int):将指定:将指定byte数组中的数据数组中的数据从第二个参数开始,输出第三个参
13、数指定的长度到指定从第二个参数开始,输出第三个参数指定的长度到指定的的Stream;(3) wirte(int);将一个;将一个int值输出到指定的值输出到指定的Stream;18flush和close 有些输出流在输出时先放在缓冲中,可以使用有些输出流在输出时先放在缓冲中,可以使用flush将这些数据真正写入指定的输出流中将这些数据真正写入指定的输出流中public void flush( ) throws IOException Close用于关闭指定的输出流。用于关闭指定的输出流。 public void close( ) throws IOException19FileOutputSt
14、ream FileOutputStream是是OutputStream的一个子类的一个子类 FileOutputStream有有5个构造方法,最常用的方法个构造方法,最常用的方法 public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(String name,boolean append) throws FileNotFoundException 说明说明 name:指定数据要写入的文件名:指定数据要写入的文件名 append:为真,则将数据添加到文件已有内容的末为真,则
15、将数据添加到文件已有内容的末尾;为假,删除已有的内容,再写入新的内容。尾;为假,删除已有的内容,再写入新的内容。20输输 出出 步步 骤骤 建立输出流:建立对应的输出流对象,也就是完成由流对象到外部数据源之间的转换。 向流中写入数据:将需要输出的数据,调用对应的write方法写入到流对象中。 关闭输出流:在写入完毕以后,调用流对象的close方法关闭输出流,释放资源。 书20621习习 题题 应用应用FileInputStream类,编写应用程序,类,编写应用程序,从磁盘上读取一个从磁盘上读取一个Java程序,并将源程序代码程序,并将源程序代码显示在屏幕上。(被读取的文件路径为:显示在屏幕上。
16、(被读取的文件路径为:D:/workspace/ch3/test.java)22PrintStream 类类 java.io.PrintStream 是类是类FilterOutputStream的的子类子类 实例实例: System.out 和和 System.err 类类PrintStream 的优点的优点 可以输出各种各样的数据可以输出各种各样的数据 一般不会抛出例外一般不会抛出例外(IOException) 具有自动强制输出(具有自动强制输出(flush)功能)功能 书书P21023数据的输入流和输出流数据的输入流和输出流 类类 java.io.DataInputStream 和类和类
17、java.io.DataOutputStream 提供读取和写出基本数提供读取和写出基本数据类型的数据据类型的数据 读写方式具有机器读写方式具有机器(平台平台)无关性无关性 通常运用类通常运用类 DataInputStream 读取运用类读取运用类 DataOutputStream写出的数据写出的数据 书书21324习习 题题 编写一个编写一个Java程序将当程序将当100, 101, 102, 103, 104,105个数以数组的形式写入到个数以数组的形式写入到Dest.txt文件中,并文件中,并以相反的顺序读出显示在屏幕上。以相反的顺序读出显示在屏幕上。25带缓存的输入流和输出流带缓存的输
18、入流和输出流 BufferedInputStream和和BufferedOutputStream 为为InputStream、OutputStream类的对象类的对象增加缓冲区功能增加缓冲区功能 提高输入提高输入/输出输出(I/O)性能的一种方法性能的一种方法26带缓存的输入流和输出流带缓存的输入流和输出流27 构造方法构造方法:public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in, int size) public BufferedOutputStream(OutputStre
19、am out) public BufferedOutputStream(OutputStream out, int size) 最佳缓存大小高度依赖于机器平台以及输入最佳缓存大小高度依赖于机器平台以及输入/输出的数据输出的数据大小大小 例例P215带缓存的输入流和输出流带缓存的输入流和输出流28标准输入输出数据流标准输入输出数据流标准输入输出数据流标准输入输出数据流 (表表7.2,P217)static PrintStream err 标准错误输出流标准错误输出流static InputStream in 标准输入流标准输入流static PrintStream out 标准输出流标准输出流
20、可以通过类名直接访问可以通过类名直接访问System.inSystem.out1) System.err29标准输入输出数据流标准输入输出数据流重定向重定向public static void setIn(InputStream in) 将标准输入流重定向为参数in指定的输入流public static void setOut(PrintStream out) 将标准输出流重定向为参数out指定的输出流30随机访问文件随机访问文件 前面介绍的对文件操作的类一般是前面介绍的对文件操作的类一般是顺序地读取或存储数据顺序地读取或存储数据,而且读取和存储是使用而且读取和存储是使用不同的类不同的类 随机
21、访问文件方式可以在随机访问文件方式可以在指定位置指定位置读读/写字节内容写字节内容 RandomAccessFile 实例对象实例对象 构造方法构造方法public RandomAccessFile(String name,String mode ) throws FileNotFoundException 注意点注意点 必须指定文件名必须指定文件名 必须指定文件的访问模式(必须指定文件的访问模式(r或者或者rw)31运用运用 RandomAccessFileRandomAccessFile常用方法常用方法 skipBytes(long i):从前往后拨弄指示器的位置,就是从前往后拨弄指示器的
22、位置,就是跳过多少个跳过多少个字节字节读取数据。读取数据。 Void seek(long p): 对指示器作决定性的定位,用于从后往前拨弄指示对指示器作决定性的定位,用于从后往前拨弄指示器的位置。器的位置。 对于对于seek方法,拥有方法,拥有skipBytes( )的功能,但的功能,但seek( )在使用过程非常影响系统的开销。只有万在使用过程非常影响系统的开销。只有万不得已的情况下使用。不得已的情况下使用。 例:例:seek(0) 指示器移到首部指示器移到首部 例:例:P22132本章总体纲要本章总体纲要 文件与数据流简介文件与数据流简介 输入流与输出流输入流与输出流 读写器读写器 文件文
23、件33读写器读写器 (Reader和和Writer) 前面讲的输入前面讲的输入/输出流针对的是字节流输出流针对的是字节流 处理文本数据可以采用类处理文本数据可以采用类java.io.Reader 和和 java.io.Writer 类类java.io.Reader 和和java.io.Writer 是抽象是抽象(abstract )类类是基于文本的其它读写器的父类是基于文本的其它读写器的父类(superclasses) 输入输入/输出流输出流字节流字节流 读写器读写器字符流字符流 输入输出流类与读写器类之间的对应关系(输入输出流类与读写器类之间的对应关系(P223,表,表7.3)34类类Rea
24、der的方法的方法Read() public int read() throws IOException 读取单个字符 当返回值为-1时,表示到达文件的末尾。35类类Writer的方法的方法write() public void write(int c) throws IOException 输出单个字符输出单个字符 其它其它write方法方法 public void write(char text) throws IOException public abstract void write(char text, int offset, int length) throws IOExcepti
25、on public void write(String s) throws IOException public void write(String s, int offset, int length) throws IOException36类类Writer的方法的方法 flush( ) public abstract void flush ( ) throws IOException Close( ) public abstract void close ( ) throws IOException37FileReader 类类 FileReader:读取文件内容读取文件内容java.la
26、ng.Object | +-java.io.Reader | +-java.io.InputStreamReader | +-java.io.FileReader 实例实例: FileReader fr = new FileReader(test); 38FileWriter 类类 FileWriter:写文本文件写文本文件java.lang.Object | +-java.io.Writer | +-java.io.OutputStreamWriter | +-java.io.FileWriter 实例实例: FileWriter fw = new FileWriter(“test); 例子
27、:例子:P22539类类BufferedReader 类类 java.io.BufferedReader 是类是类java.io.Reader的子类的子类java.lang.Object | +-java.io.Reader | +-java.io.BufferedReader 当读取数据量很大时,一个很好的方法是当读取数据量很大时,一个很好的方法是: 通过类通过类BufferedReader,这时需要给,这时需要给Reader的子类的子类(如如: FileReader)“外包外包”上类上类BufferedReader 实例实例: BufferedReader br = new Buffere
28、dReader(new FileReader(test);40类类LineNumberReader 类类 java.io.LineNumberReader是类是类java.io.BufferedReader的子类:带有行号信息的子类:带有行号信息java.lang.Object | +-java.io.Reader | +-java.io.BufferedReader | +-java.io.LineNumberReader 类类LineNumberReader中的部分方法中的部分方法public LineNumberReader(Reader in)public LineNumberRead
29、er(Reader in, int size)public void setLineNumber(int lineNumber)public int getLineNumber()41类类BufferedWriterBufferedWriter和和FileWriter两个类都是两个类都是Writer抽象类下的子类。抽象类下的子类。它们可以以字符流的方式并使用缓冲区把数据写入文本文件,这也提它们可以以字符流的方式并使用缓冲区把数据写入文本文件,这也提高了写文本文件和效率。高了写文本文件和效率。 构造一个构造一个BufferedWriter对象对象 FileWriter fw=new FileWr
30、iter(mytest.txt); BufferedWriter bw=new BufferedWriter(fw); 利用利用BufferedWriter的方法写文本文件的方法写文本文件bw.write (“hello”); 相关流对象的清空和关闭相关流对象的清空和关闭bw.flush();fw.close(); 例题:例题:P22742PrintWriter 类类 PrintWriter 是类是类 Writer的子类的子类java.lang.Object| +-java.io.Writer | +-java.io.PrintWriter 类类 PrintWriter 用于处理文本数据而不是
31、字节数据用于处理文本数据而不是字节数据 方法:方法:P229-230 例子:例子:P23143类类 InputStreamReader 从控制台窗口读入数据的常用方法从控制台窗口读入数据的常用方法 类类 java.io.InputStreamReader 起到了从输入流到起到了从输入流到Reader的桥梁作用的桥梁作用 实例实例: InputStreamReader isr = new inputStreamReader(System.in);44类类 OutputStreamWriter 类类 java.io.OutputStreamWriter起到了从输出流到起到了从输出流到Writer的桥梁作用的桥梁作用 实例实例:OutputStreamWriter osw = ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空中交通模拟训练考核试卷
- 租赁设备的绿色环保与可持续发展考核试卷
- 商业赞助谈判与价值实现考核试卷
- 碳酸饮料产品包装设计创意考核试卷
- 电影拍摄中机械装置的节能降耗措施考核试卷
- 江苏省泰州市泰兴市黄桥教育联盟2025届普通高中初三第二次模拟考试化学试题含解析
- 江苏科技大学苏州理工学院《喷雾与燃烧光学诊断技术(双语)》2023-2024学年第二学期期末试卷
- 南昌工学院《食品安全检测综合大》2023-2024学年第二学期期末试卷
- 江苏省盐城市新洋第二实验校2025届初三下学期期末教学质量检测试题物理试题试卷含解析
- 江苏安全技术职业学院《数字图像基础》2023-2024学年第二学期期末试卷
- 2024山东能源集团中级人才库选拔高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024届合肥市高三第三次教学质量检测 英语答案
- 初中英语七选五经典5篇(附带答案)
- 巡察知识讲解课件
- 芯片销售入职培训课件
- 苏丹草品种与栽培技术
- 智能垃圾桶教学课件
- 基于ITU-R P.1546传播模型的适用性和可视化研究
- 厂房出租合同简易范本
- 乾坤未定,你我皆是黑马!课件-2023-2024学年高三上学期励志教育主题班会
- 2023年健康医疗大数据行业调研分析报告
评论
0/150
提交评论