




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 Java输入与输出(I/O),信息科学与技术学院 软件工程系 王建民 PhoneE_mail:,2,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 字 节 流 6.4 字符流 6.5 RandomAccessFile类 6.6 过 滤 器 流 6.7 对象序列化(objectcserialization) 6.8 Scanner类,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流 6.6 RandomAccessFile类,3,4,6.1 Fi
2、le类,File类是一个与流无关的类。File类的对象可以获取文件及其文件所在的目录、文件的长度等信息。创建一个File对象的常用构造方法有3种: (1)File(String pathname) (2)File(String path,String filename) (3)File(File file,String filename),5,File类,(1)File(String pathname) 该构造方法通过指定的文件路径字符串来创建一个新File实例对象。 语法: pathname:文件路径字符串,包括文件名称。就是将一个代表路径的字符串转换为抽象的路径。,new File(fil
3、ename);,6,File类,(2)File(String path,String filename) 该构造方法根据指定的父路径字符串和子路径字符串(包括文件名称)创建File类的实例对象。 语法: path:父路径字符串。 filename:子路径字符串,不能为空。,new File(path, filename);,2、File类构造器File(String path),Path可以是文件的完整路径名,也可只有路径而无文件名;路经可以是绝对路径,也可以是相对路径;路径或文件名可以是已存在的也可是新的,新的则被创建,旧的则被刷新。 例1:File file1=newFile(“f:jav
4、aaaa”); 在已存在的f:java目录下新创建一个aaa目录,使用的是绝对路径,且只能创建一层新目录。 例2:File file2=new File(“bbb”); 在当前工作目录下,创建bbb新目录的文件对象,使用的是相对路径 例3:File file3=new File(“f:javafile1.txt”); 使用绝对路径,在已存在的f:java目录下创建一个文本文件对象。,File类,7,8,File类,(3)File(File file,String filename) 该构造方法根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建File类的实例对象。 语法: f
5、ile:是父路径对象。 filename:子路径字符串。 File类包含了文件和文件夹的多种属性和操作方法。常用的方法如下表所示。,new File(file,filename);,2、File类构造器File (File dir,String name),例4: File file1=new File(“f:javaaaa”); File file6=new File(file1,”myfile.txt”); 【例6-1】,File类,9,10,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流 6.6 Ran
6、domAccessFile类,11,12,6.2 流,在Java中,流是从源到目的地的字节的有序序列; 流中的字节依据先进先出,具有严格的顺序,是一种顺序存取方式。,Input stream(输入流),程序-数据源(文件、内存)-打开一个流-读数据,流是有方向的:从输入流读入-不能写数据,13,Output stream(输出流),程序-数据-写入流-保存到目的地(文件、内存),流是有方向的:向输出流写入-不能读数据,14,流操作的过程,Reading: open a stream while more information read information close the stream
7、,Writing : open a stream while more information write information close the stream,15,6.2.1输入/输出流的分类,Java.io包中定义了多个流类型(类或抽象类)来实现输入、输出功能;可以从不同的角度对其进行分类: 按数据流的方向不同可以分为输入流和输出流; 按处理数据单位不同可以分为字节流和字符流; 按照功能不同可以分为节点流和处理流。,16,输入/输出流,输入流/输出流以java程序为标准。,输入流,输出流,17,字节流/字符流,按处理数据单位不同可以分为字节流和字符流; 字节流读取的最小单位是一个字节
8、(1byte=8bit) 而字符流一次可以读取一个字符(1char = 2byte = 16bit)。,18,节点流和处理流,节点流为可以从一个特定的数据源(节点)读写数据(如:文件、内存) 处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的读写为程序提供强大的功能。,19,20,6.2.2 输入输出流,输入输出流一般分为4种: 字节输入流 字节输出流 字符输入流 字符输出流,21,字节输入流,InputStream类是字节输入流的抽象类,它是所有字节输入流的父类,其各种子类实现了不同的数据输入流。这些字节输入流的继承关系如下图所示。,22,字节输出流,OutputStream类
9、是字节输出流的抽象类,它是所有字节输出流的父类,其子类实现了不同数据的输出流。继承关系如下图所示。,23,字符输入流,Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类。Java中字符输入流的继承关系如下图所示。,24,字符输出流,Writer类是字符输出流的抽象类,所有字符输出流的实现都是它的子类。Java中字符输出流的继承关系如下图所示。,25,6.2 字节流与字符流,字节流是以字节为单位来处理数据的,由于字节流不会对数据做任何转换,因此用来处理二进制的数据。,以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。 两个对应类实现的功能相同,只是在操
10、作时的导向不同 如 CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。,6.2 字节流与字符流,26,27,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流 6.6 RandomAccessFile类 6.7 对象序列化(objectcserialization) 6.8 Scanner类,28,6.3.1 InputStream类与OutputSt
11、ream类,InputStream类是所有字节输入流的父类,它定义了操作输入流的各种方法。常用方法如下表所示。,29,InputStream类与OutputStream类,OutputStream类是所有字节输出流的父类,它定义了输出流的各种操作方法。常用的方法如下表所示。,30,6.3.2 字符流,字符流(charactercstreams)用于处理字符数据的读取和写入,它以字符为单位。 Reader类和Writer类是字符流的抽象类,它们定义了字符流读取和写入的基本方法,各个子类会依其特点实现或覆盖这些方法。,31,6.3.2 Reader类与Writer类,Reader类是所有字符输入流
12、的父类,它定义了操作字符输入流的各种方法。常用方法如下表所示。,32,Reader类与Writer类,Writer类是所有字符输出流的父类,它定义了操作输出流的各种方法。常用方法如下表所示。,6.3.2、标准输入/输出,在java 中: “标准输入”是System.in对象, “标准输出”是System.out 对象, “标准错误输出” 是System.err对象。 每当main方法被执行时,就自动生成上述三个对象 System.out和System.err已预封装成一个PrintStream对象,能直接使用。 System.in是一个原始的InputStream,未进行任何封装处理,必须事先
13、封装System.in,否则不能从中读取数据。例如:我们希望用readLine()每次从标准输入中读取一行输入信息,然后显示出来,就需要将System.in封装到一个DataInputStream或者BufferedReader中。,33,1、标准输入/输出示例,34,19:17,35,6.3.3 输入/输出流体系,35,import java.io.*; public class StringDemo public static void main(String args) String s; InputStreamReader ir; BufferedReader in; ir = new
14、 InputStreamReader( );/创建标准的输入/输出流 in = new (ir); try do s= ; /从键盘读取一行字符串 if (s!=null) System.out.println(“Reader: ”+s);/输出读取数据 while ; /判断输入“Exit”结束输入 catch(Exception e) ,示例:创建StringDemo类,实现字符串的输入输出。,System.in,BufferedReader,in.readLine(),(!(s.equals( exit),?程序结束了吗。丢了哪一步?,36,37,第 6 章 Java输入与输出(I/O)
15、,6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流 6.6 RandomAccessFile类 6.7 对象序列化(objectcserialization) 6.8 Scanner类,38,6.4.1 FileInputStream类,FileInputStream类是InputStream类的子类。它实现了文件的读取,是文件字节输入流。该类适用于比较简单的文件读取,该类的所有方法都是从InputStream类继承并重写的。创建文件字节输入流常用的构造方法有两种: FileInputStream(String filePath) FileInputS
16、tream(File file),39,FileInputStream类,(1)FileInputStream(String filePath) 该构造方法根据指定的文件名称和路径,创建FileInputStream类的实例对象。 语法: filePath:文件的绝对路径或相对路径。,new FileInputStream (filePath);,40,FileInputStream类,(2)FileInputStream(File file) 该构造方法使用File类型的文件对象创建FileInputStream类的实例对象。 语法: file:File文件类型的实例对象。 【例6-2】,n
17、ew FileInputStream (file);,41,6.4.2 FileOutputStream类,FileOutputStream类是OutputStream类的子类。它实现了文件的写入,能够以字节形式写入文件中,该类的所有方法都是从OutputStream类继承并重写的。创建文件字节输出流常用的构造方法有两种: FileOutputStream(String filePath) FileOutputStream(File file),42,FileOutputStream类,(1)FileOutputStream(String filePath) 该构造方法根据指定的文件名称和路径
18、,创建关联该文件的FileOutputStream类的实例对象。 语法: filePath:文件的绝对路径或相对路径。,new FileOutputStream (filePath);,43,FileOutputStream类,(2)FileOutputStream(File file) 该构造方法使用File类型的文件对象,创建与该文件关联的FileOutputStream类的实例对象。 语法: file:File文件类型的实例对象。在file后面,加true会对原有内容进行追加,不加true会将原有内容覆盖。 【例6-3】,new FileOutputStream (file);,44,6
19、.4.2 FileReader类,FileReader类是Reader类的子类,它实现了从文件中读出字符数据,是文件字符输入流。该类的所有方法都是从Reader类中继承来的。FileReader类的常用构造方法有两种: FileReader(String filePath) FileReader(File file),45,6.4.3 FileReader类,(1)FileReader(String filePath) 该构造方法根据指定的文件名称和路径,创建FileReader类的实例对象。 语法如下: filePath:文件的绝对路径或相对路径。,new FileReader(filePa
20、th);,46,FileReader类,(2)FileReader(File file) 该构造方法使用File类型的文件对象创建FileReader类的实例对象。 语法如下: file:File文件类型的实例对象。,new FileReader(file);,47,FileReader类,例如,利用FileReader读取文件“Example3.txt”的内容,输出到控制台上程序代码为:,try File f=new File(C:,Example3.txt); FileReader fr=new FileReader(f);/ 创建文件字符输入流 char data=new char512
21、; int rs=0; while(rs=fr.read(data)0)/ 在循环中读取数据 String str=new String(data,0,rs); System.out.println(str); catch (Exception e) e.printStackTrace(); ,48,6.4.4 FileWriter类,FileWriter类是Writer类的子类,它实现了将字符数据写入文件中,是文件字符输出流。该类的所有方法都是从Writer类中继承来的。FileWriter类的常用构造方法有两种: FileWriter(String filePath) FileWriter
22、(File file),49,FileWriter类,(1)FileWriter(String filePath) 该构造方法根据指定的文件名称和路径,创建关联该文件的FileWriter类的实例对象。 语法如下:,new FileWriter(filePath);,50,FileWriter类,(2)FileWriter(File file) 该构造方法使用File类型的文件对象,创建与该文件关联的FileWriter类的实例对象。 语法如下:,new FileWriter(file);,51,FileWriter类,例如, “Example3.txt”的内容复制到文件“Example6.t
23、xt”中。具体代码为:,try File f=new File(C:,Example6.txt); if (!f.exists()/ 如果文件不存在 f.createNewFile();/ 创建新文件 FileReader fr=new FileReader(C:Example3.txt);/ 创建文件字符输入流 FileWriter fWriter=new FileWriter(f);/ 创建文件字符输出流 int is; while(is=fr.read() != -1) fWriter.write(is);/ 将数据写入输出流 fr.close(); fWriter.close(); c
24、atch (Exception e) e.printStackTrace(); ,52,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流与转换流 6.6 RandomAccessFile类,53,6.5.1 BufferedReader类,BufferedReader类是Reader类的子类,使用该类可以以行为单位读取数据。 BufferedReader类的主要构造方法为: 该构造方法使用Reader类的对象,创建一个BufferReader对象。 语法如下:,new BufferedReader(in);,B
25、ufferedReader(Reader in),54,BufferedReader类,BufferedReader 类中提供了一个ReaderLine()方法,Reader类中没有此方法,该方法能够读取文本行。例如:,FileReader fr; try fr = new FileReader(C:Example6.txt); BufferedReader br = new BufferedReader(fr); String aline; while (aline=br.readLine() != null)/按行读取文本 String str=new String(aline); fr.
26、close(); br.close(); catch (Exception e) e.printStackTrace(); ,55,6.5.2 BufferedWriter类,BufferedWriter类是Writer类的子类,该类可以以行为单位写入数据。BufferedWriter类常用的构造方法为: 该构造方法使用Writer类的对象,来创建一个BufferWriter对象。 语法如下:,new BufferedReader(out);,BufferedWriter(Writer out),56,BufferedWriter类,BufferedWriter类提供了一个newLine()方
27、法,Writer类中没有此方法。该方法是换行标记。例如: 【例6-6】,File file=new File(C:,Example6.txt); FileWriter fos; try fos = new FileWriter(file,true); BufferedWriter bw=new BufferedWriter(fos); bw.write(Example); bw.newLine(); bw.write(Example); bw.close(); catch (IOException e) e.printStackTrace(); ,6.5.1 PrintStream类,Prin
28、tStream是打印输出流,它可以直接输出各种类型的数据。创建打印输出流常用的构造方法为: 该构造方法使用OutputStream类的对象,创建一个PrintStream对象。 语法如下:,new PrintStream(out);,PrintStream(OutputStream out),57,PrintStream类,PrintStream类常用的方法如下表所示。 【例6-7】,58,6.5.3 InputStreamReader类,InputStreamReader 是字节流通向字符流的桥梁。它可以根据指定的编码方式,将字节输入流转换为字符输入流。创建字符输入流常用的构造方法有两种:
29、InputStreamReader(InputStream in) InputStreamReader(InputStream in, String cname),59,InputStreamReader类,(1)InputStreamReader(InputStream in) 该构造方法使用默认字符集创建InputStreamReader类的实例对象。 语法如下: in:字节流类的实例对象。,new InputStreamReader(in);,60,InputStreamReader类,(2)InputStreamReader(InputStream in, String cname)
30、该构造方法使用已命名的字符编码方式创建InputStreamReader类的实例对象。 语法如下: cname:使用的编码方式名。 InputStreamReader类常用的方法如下表所示。,new InputStreamReader(in,cname);,61,InputStreamReader类,【例6-4】,62,6.5.4 OutputStreamWriter类,OutputStreamWriter 是字节流通向字符流的桥梁。写出字节,并根据指定的编码方式,将之转换为字符流。创建字符输出流常用的构造方法有两种。 OutputStreamWriter(OutputStream out)
31、OutputStreamWriter(OutputStream out,String cname),63,OutputStreamWriter类,(1)OutputStreamWriter(OutputStream out) 该构造方法使用默认字符集创建OutputStreamWriter类的实例对象。 语法如下: out:字节流类的实例对象。,new OutputStreamReader(out);,64,OutputStreamWriter类,(2)OutputStreamWriter(OutputStream out,String cname) 该构造方法使用已命名的字符编码方式创建Ou
32、tputStreamWriter类的实例对象。 语法如下: cname:使用的编码方式名。 OutputStreamReader类常用的方法如下表所示:,new OutputStreamWriter(out,cname);,65,OutputStreamWriter类,【例6-5】,66,67,第 6 章 Java输入与输出(I/O),6.1 File类 6.2 流 6.3 四个基本输入输出流 6.4 节点流 6.5 处理流与转换流 6.6 RandomAccessFile类,6.6 RandomAccessFile类,使用RandomAccessFile类可以读取任意位置数据的文件。Rand
33、omAccessFile类既不是输入流类的子类,也不是输出流类的子类。RandomAccessFile类常用的构造方法有两种。 RandomAccessFile(String name,String mode) RandomAccessFile(File file,String mode),68,RandomAccessFile类,(1)RandomAccessFile(String name,String mode) 语法如下: name:和系统相关的文件名。 mode:用来决定创建的流对文件的访问权利,它可以是r、rw、rws或rwd,r代表只读, rw代表可读写,rws代表同步写入,rw
34、d代表将更新同步写入。,new RandomAccessFile(name,mode);,69,RandomAccessFile类,(2)RandomAccessFile(File file,String mode) 语法如下: file:一个File类的对象。 RandomAccessFile类常用的方法如下表所示:,new RandomAccessFile(file,mode);,70,RandomAccessFile类,71,RandomAccessFile类,利用上述方法显示文件本身源代码的执行过程如下: 【例6-9】,try File f=new File(C:,Example8.txt); RandomAccessFile raf=new RandomAccessFile(f,rw); /创建随机访问文件为读写 long filepoint=0;/定义文件总长度变量 lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 好教育好人生
- 学校法制教育汇报
- 布氏杆菌肺炎CT表现
- 教育学心理学探讨
- 2025年体育与健康课
- 牙齿美白术的护理
- 我运动·不怕冷·享健康
- 企业的主数据建设方法论与实践
- 能源行业碳中和碳达峰光储一体化智慧安全项目建设方案
- 2025年锁眼机项目提案报告
- 公司客户开发管理制度
- JG/T 3033-1996试验用砂浆搅拌机
- 2025年数字媒体艺术专业考试试卷及答案
- (高清版)DB13∕T 5834-2023 化工建设项目安装工程质量技术资料管理规范
- 2024 - 2025湘美版小学美术期末试卷附答案
- 安徽省芜湖市2025届高考二模地理试题(含答案)
- 2025年电子信息工程专业综合能力考试卷及答案
- 2025年度6深圳中考数学考点、知识点的总结模版
- DB13(J)-T 8422-2021 建筑工程消能减震技术标准
- 2024统编版七年级历史下册 第18课《清朝的边疆治理》教学设计
- 喷粉技术员试题及答案
评论
0/150
提交评论