




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 文件和流,学习导读,输入和输出是一个程序重要的功能,Java的应用程序和Java Applet往往经常要通过输入和输出来读写数据。 本章将介绍如何从一个能发送字节序列的“数据源”获得输入,以及如何将输出发送给能够接收字节序列的一个“目标”。,课程结构,Java流类库简介 基本流 数据流 过滤流 文件流 对象流,10.1 Java流类库简介,1 流的概念 Java所有的I/O机制都是基于数据流的,这些数据流表示了字符或者字节数据的流动序列。 流是一个很形象的概念,当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接,则这就是“输入流”,如图所示。类
2、似的,当程序需要写入数据的时候,就会开启一个通向目的地的流,这就是“输出流”,这时你就可以想像数据好像在这其中“流”动一样,如图所示。,10.1 Java流类库简介,输入流,输出流,10.1 Java流类库简介,Java中的流分为两种: 一种是字节流,另一种是字符流 分别由四个抽象类来表示(每种流包括输入和输出各两种,所以一共四个): InputStream OutputStream Reader Writer,10.1 Java流类库简介,2 Java的I/O库 Java中的字节流是用于处理字节的输入和输出的,包括读写二进制数据等方面的内容。 InputStream OutputStream
3、 而Java中的字符流则用于处理字符的输入和输出,采用的是Unicode编码,可以实现国际化。 Reader Writer,10.1 Java流类库简介,(1)InputStream 1)abstract int read() 2)int read(byte b) 3)int read(byte b,int off,int len) 4)long skip(long n) 5)int available() 6)void close() 7)void mark(int readlimit) 8)void reset() 9)boolean markSupported(),10.1 Java流类
4、库简介,(2)OutputStream 1)abstract void write(int b) 2)void write(byte b) 3)void write(byte b,int off,int len) 4)void close() 5)void flush(),10.1 Java流类库简介,(3)Reader Writer public abstract int read() throws IOException public abstract void write() throws IOException,10.2 基本流,1. 键盘输入和格式化输出 它有3个内置的标准流对象,它
5、们是: 1)标准输入流System.io:用于程序的输入,通常用来读取用户从键盘的输入。 2)标准输出流System.out:用于程序的输出,通常用来在屏幕上显示信息。 3)标准出错流System.err:用于显示出错信息。,10.2 基本流,基本的键盘输入 (1)方法一:使用System.in对象的方法read()来读取键盘的输入 见例10。1 (2)方法二:可以通过java.io包中提供的流类接收键盘的输入 见例10。2 (3)可以通过控制台类Console类来实现从键盘输入;控制台类Console不属于Java的标准类库,它属于corejava包 见例10。3,10.2 基本流,格式化输
6、出 1)输出方法:用System.out内置的标准输出对象来输出到标准设备(一般是显示器) 见例10。3 2)可以控制显示格式,在java.text包中的NumberFromat类就可以控制输出的格式 见例10。5 3)用户还可以创建自己的格式 4)用Console类格式化输出,10.2 基本流,2.读和写字节 (1)InputStream类的抽象方法 (2)OutputStream类的抽象方法 (3)available方法,10.3 数据流,数据流支持所有Java中的基本类型。 可以通过分别实现了DataOutput和DataInput两个接口的DataOutputStream和DataIn
7、putStream类中的方法对基本数据进行读写,10.3 数据流,DataInput接口 1)boolean readBoolean():读入一个布尔值。 2)byte readByte():读入一个8位字节。 3)char readChar():读入一个16位的字符。 4)double readDouble():读入一个64位double字符。 5)float readFloat():读入一个32位float字符。 6)void readFully(byte b):读字节,直到读所有字节才封锁,参数b为读入数据的缓冲区。,10.3 数据流,7)void readFully(byte b,in
8、t off,int len):读字节,直到读所有字节才封锁,参数b为读入数据的缓冲区,off为数据的起始偏移量,len为写的字节数。 8)int readInt():读一个32位整数。 9)String readLine():读入一行以一个n,r,rn或EOF结束的字符串,返回一个字符串,该字符串包含转换为单位码字符的行中的所有字节。 10)long readLong():读入一个64位的长整数。 11)short readShort():读入一个16位的短整数。 12)String readUTF():读入一个UTF格式的字符串。 13)int skipByte(int n):跳过若干个字节
9、,直到跳过所有的字节才封锁,n为跳过的字节。,10.3 数据流,2 Java.DataOutput接口 1)void writeBoolean(boolean b):写一个布尔值。 2)void writeByte(byte b):写一个8位字节。 3)void writeChar(char c):写一个16位字符。 4)void writeChars(String s):写入字符串的所有字符。 5)void writeFloat(float f):写32位float数。 6)void writeDouble(double d):写64位double数。 7)void writeInt(int
10、 I):写32位整数。 8)void writeLong(long l):写64位长整数。 9)void writeShort(short s):写16位短整数。 10)void writeUTF(String s):写一个UTF格式的字符串,10.4 java的输入输出流简介,一、字节流:( InputStream,OutStream) 1、FileInputStream(文件输入流):源自日常文件的数据输入流,它可以创建一个能从文件中读取字节的InputStream类。它的构造函数为: FileInputStream(String filepath) throws FileNotFound
11、Exception; FileInputStream(File fileObj) throws FileNotFoundException; 其中:filepath是文件的全称路径,fileObj是描述该文件的File对象。,2、ByteArrayInputStream(字节数组输入流) 把字节数组当成源的输入流。 ByteArrayInputStream 包含一个内部缓冲区,该缓冲区存储从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。构造函数: ByteArrayInputStream(byte array) ByteArrayInputStream(byte array
12、,int start,int numBytes) 例:ByteArrayInputStreamReset.java,10.4 java的输入输出流简介,3、FileOutputStream(文件输出流) 创建一个可以向文件写入字节的类OutputStream,可以引发IOException或SecurityException异常。FileOutputStrem的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。此时如果打开一个只读文件,将会引发一个IOException异常。常用构造函数: FileOutputStream(String fileP
13、ath) FileOutputStream(String filePath,boolean append) FileOutputStream(File fileObj) 例:FileOutputStreamDemo.java,10.4 java的输入输出流简介,4、ByteArrayOutputStream(字节数组输出流) 是一个把字节数组当作输出流的实现,构造函数为: ByteArrayOutputStream():生成一个32位字节的缓冲器。 ByteArrayOutputStream(int numBytes):生成一个跟指定numBytes相同位数的缓冲器。 5、BufferedIn
14、putStream(缓冲输入流)和BufferedOutputStream(缓冲输出流) BufferedInputStream在InputStream中加一个读取缓冲,能显著提高读取性能。,10.4 java的输入输出流简介,构造函数: BufferedInputStream(InputStream inputStream):生成一个默认长度的缓冲流。 BufferedInputStream(InputStream inputStream,int bufSize):缓冲器的大小是由bufSize传入的。 BufferedOutputStream:把write()等方法写入的数据暂时存放在缓冲
15、区中,当缓冲区满或者用户调用flush()强制写入数据时才把数据写入输入输出设备。这样有效地减少读写设备的次数,提高系统的性能。 构造函数: BufferedOutputStream(OutputStream outputStream) BufferedOutputStream(OutputStream outputStream,int bufSize) 例:DownLoad.java,10.4 java的输入输出流简介,6、SequenceInputStream(顺序输入流) 可以连接多个InputStream流。 7、PushbackInputStream(返回输入流) 用于输入流允许字节
16、被读取然后返回到流。,10.4 java的输入输出流简介,二、字符流: 字节流提供了处理任何类型输入/输出操作的足够的功能,但它们不能直接操作Unicode字符,字符流面向字符,读写的单位是两个字节。字符流以Reader和Writer为顶层。 常见的字符流: 1、FileReader和FileWriter: FileReader创建一个可以读取文件内容的Reader类: 构造函数: FileReader(String filePath) FileReader(FilefileObj),10.4 java的输入输出流简介,FileWriter创建一个可以写文件的Writer类: FileWrit
17、er(String filePath) FileWriter(String filePath,boolean append) FileWriter(File fileObj) 例:txtCopy.java,10.4 java的输入输出流简介,2、CharArrayReader和CharArrayWriter (1)CharArrayReader是一个把字符数组作为源的输入流的实现,构造函数: CharArrayReader(char array); CharArrayReader(char array,int start,int numChars); (2) CharArrayWriter是一
18、个把字符数组作为目标的输出流的实现,构造函数: CharArrayWriter():创建一个默认长度的缓冲器。 CharArrayWriter(int numChars):缓冲器长度由numChars指定。 例:CharArrayReaderDemo.java,10.4 java的输入输出流简介,3、BufferedReader和BufferedWriter 4、PushbackReader:允许一个字符或多个字符被送回输入流。,10.4 java的输入输出流简介,10.5过滤流,对于某些流来说(比如FileInputStream),它可从文件或一些更特殊的地方读入字节数据。 对另一些流来说(
19、比如DataInputStream以及PrintWriter),它们则可将字节“组装”成更有用的数据类型。 Java程序源必须综合运用这两种流,将其合并成所谓的“过滤流”, 方法是将一个现成的流传递给另一个流的构造函数。,10.6文件流,在Java中,文件流是用得比较广泛的一种流形式,它以磁盘文件为输入或输出的原始数据和目的。 在Java中,把文件看成是一个字符(字节)的序列。根据数据的组织形式,可将文件分为文本文件和二进制文件。 在文本文件中,每一个字节存放一个ASCII码,代表一个字符。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上存放。 文件流也就根据所针对的文件
20、类型的不同而分为文本流和二进制流。 在Java的I/O库中,抽象类Reader和Writer只能用来对文本文件进行操作,而 抽象类InputStream和OutputStream 可以对文本文件或二进制文件进行操作。,10.5 文件流,1 二进制文件的读写 (1)二进制文件的写 二进制文件的写通常要用到DataOutputStream类 格式如下: FileOutputStream out=new FileOutputStream(“路径和文件名”); DataOutputStream dos=new DataOutputStream(“out”); 或 DataOutputStream do
21、s=new DataOutputStream( new FielOutputStream(“路径和文件名”)); 然后可以用DataOutputStream实现的方法向文件写入数据 dos.writeDouble(); dos.writeInt() 见例10.6,10.5 文件流,(2)二进制文件的读 二进制形式文件的读,通常要用到DataInputStream类 格式如下: FileInputStream in=new FileInputStream(“路径和文件名“); DataInputStream dis=new DataInputStream(“in”); 当然也可以写成: Data
22、InputStream dis=new DataInputStream( new FileInputStream(“路径和文件名“)); 然后用数据流的方法读入文件中的数据,如: double d=dis.readDouble(); int i=dis.readInt(); 见例10。7,10.5 文件流,2 文本文件的读写 在Java中,采用的是Unicode字符。也就是说“1234”这个字符串的字符编码是00 31 00 32 00 33 00 34 Java提供了一个过滤流,可以用来弥补Unicode编码和本机操作系统采用的字符编码间不同造成的问题 如 FileInputStream f
23、is=new FileInputStream(“myfile.txt”); InputStreamReader isr=new InputStreamReader(fis); 或 nputStreamReader isr=new InputStreamReader( new FileInputStream(“myfile.txt”); 或 FileReader fr=new FileReader(“myfile.txt”),10.5 文件流,(1)写文本文件 1)FileOutputStream 方法是: FileOutputStream out out = new FileOutputStr
24、eam(myfile.txt); PrintStream p = new PrintStream( out ); 用 p.println() 来写入数据,然后用 p.close() 关闭输入 见例10。9 2)用 FileWriter 方法是:FileWriter fw = new FileWriter(mydata.txt);PrintWriter out = new PrintWriter(fw); 用out.print 或 out.println往文件中写入数据,写完后要用out.close() 关闭输出,用fw.close() 关闭文件 见例10。10,10.5 文件流,2读文本文件 1) 用FileInputStream 方法是: FileInputStream fstream = new FileInputStream(args0); DataInputStream in = new DataInput
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探索品牌与消费者关系的演变计划
- 2025-2030中国长期护理行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国钢化玻璃屏幕保护膜行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国金属钙行业现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030中国进口肉类行业市场深度分析及发展前景与投资机会研究报告
- 2025-2030中国轻轨车辆行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国转移性卵巢癌药物行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国资产管理行业市场发展现状及前景趋势与投资发展战略研究报告
- 2025-2030中国货物运输保险行业市场深度调研及竞争格局与投资前景研究报告
- 2025-2030中国袋盖行业市场发展趋势与前景展望战略研究报告
- 2025届贵州省安顺市高三二模语文试题
- 2025中国海洋大学辅导员考试题库
- 新疆维吾尔自治区普通高职(专科)单招政策解读与报名课件
- 2024年昆明渝润水务有限公司招聘考试真题
- 2025-2030中国小武器和轻武器行业市场发展趋势与前景展望战略研究报告
- 高中主题班会 高考励志冲刺主题班会课件
- 高三复习:2025年高中化学模拟试题及答案
- 月考试卷(1~3单元)(试题)-2024-2025学年六年级下册数学人教版(带答案)
- 8.1薪火相传的传统美德 教学设计-2024-2025学年统编版道德与法治七年级下册
- 中国急性缺血性卒中诊治指南(2023)解读
- 2025年中国大唐集团有限公司校园招聘笔试参考题库附带答案详解
评论
0/150
提交评论