《Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第12章 文件和流》由会员分享,可在线阅读,更多相关《Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第12章 文件和流(28页珍藏版)》请在金锄头文库上搜索。
1、第12章 文件和流,学习导读,输入和输出是一个程序重要的功能,Java的应用程序和Java Applet往往经常要通过输入和输出来读写数据。 本章将介绍如何从一个能发送字节序列的“数据源”获得输入,以及如何将输出发送给能够接收字节序列的一个“目标”。,课程结构,Java流类库简介 基本流 数据流 文件流 对象流和序列化,12.1 Java流类库简介,1 流的概念 Java所有的I/O机制都是基于数据流的,这些数据流表示了字符或者字节数据的流动序列。 流是一个很形象的概念,当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接,则这就是“输入流”,如图所示。类
2、似的,当程序需要写入数据的时候,就会开启一个通向目的地的流,这就是“输出流”,这时你就可以想像数据好像在这其中“流”动一样,如图所示。,12.1 Java流类库简介,输入流,输出流,12.1 Java流类库简介,Java中的流分为两种: 一种是字节流,另一种是字符流 分别由四个抽象类来表示(每种流包括输入和输出各两种,所以一共四个): InputStream OutputStream Reader Writer,12.1 Java流类库简介,2 Java的I/O库 Java中的字节流是用于处理字节的输入和输出的,包括读写二进制数据等方面的内容。 InputStream OutputStream
3、 而Java中的字符流则用于处理字符的输入和输出,采用的是Unicode编码,可以实现国际化。 Reader Writer,12.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(),12.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(),12.1 Java流类库简介,(3)Reader Writer public abstract int read() throws IOException public abstract void write() throws IOException,12.2 基本流,1. 键盘输入和格式化输出 它有3个内置的标准流对象,它
5、们是: 1)标准输入流System.io:用于程序的输入,通常用来读取用户从键盘的输入。 2)标准输出流System.out:用于程序的输出,通常用来在屏幕上显示信息。 3)标准出错流System.err:用于显示出错信息。,12.2 基本流,基本的键盘输入 (1)方法一:使用System.in对象的方法read()来读取键盘的输入 例12.1 标准输入输出演示StdInOut.java (2)方法二:可以通过java.io包中提供的流类接收键盘的输入 例12.2 使用流类实现键盘输入一个浮点数的程序ReadDouble.java,12.2 基本流,格式化输出 1)以控制显示格式,在java.
6、text包中的NumberFromat类就可以控制输出的格式 见例12.3 例12.3 格式化输出 OutputTest.java,12.3 数据流,数据流支持所有Java中的基本类型。 可以通过分别实现了DataOutput和DataInput两个接口的DataOutputStream和DataInputStream类中的方法对基本数据进行读写,12.3 数据流,DataInput接口 1)boolean readBoolean():读入一个布尔值。 2)byte readByte():读入一个8位字节。 3)char readChar():读入一个16位的字符。 4)double read
7、Double():读入一个64位double字符。 5)float readFloat():读入一个32位float字符。 6)void readFully(byte b):读字节,直到读所有字节才封锁,参数b为读入数据的缓冲区。,12.3 数据流,7)void readFully(byte b,int off,int len):读字节,直到读所有字节才封锁,参数b为读入数据的缓冲区,off为数据的起始偏移量,len为写的字节数。 8)int readInt():读一个32位整数。 9)String readLine():读入一行以一个n,r,rn或EOF结束的字符串,返回一个字符串,该字符串
8、包含转换为单位码字符的行中的所有字节。 10)long readLong():读入一个64位的长整数。 11)short readShort():读入一个16位的短整数。 12)String readUTF():读入一个UTF格式的字符串。 13)int skipByte(int n):跳过若干个字节,直到跳过所有的字节才封锁,n为跳过的字节。,12.3 数据流,2 Java.DataOutput接口 1)void writeBoolean(boolean b):写一个布尔值。 2)void writeByte(byte b):写一个8位字节。 3)void writeChar(char c)
9、:写一个16位字符。 4)void writeChars(String s):写入字符串的所有字符。 5)void writeFloat(float f):写32位float数。 6)void writeDouble(double d):写64位double数。 7)void writeInt(int I):写32位整数。 8)void writeLong(long l):写64位长整数。 9)void writeShort(short s):写16位短整数。 10)void writeUTF(String s):写一个UTF格式的字符串,12.4 文件流,在Java中,文件流是用得比较广泛的
10、一种流形式,它以磁盘文件为输入或输出的原始数据和目的。 在Java中,把文件看成是一个字符(字节)的序列。根据数据的组织形式,可将文件分为文本文件和二进制文件。 在文本文件中,每一个字节存放一个ASCII码,代表一个字符。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上存放。 文件流也就根据所针对的文件类型的不同而分为文本流和二进制流。 在Java的I/O库中,抽象类Reader和Writer只能用来对文本文件进行操作,而 抽象类InputStream和OutputStream 可以对文本文件或二进制文件进行操作。,12.5 文件流,1 二进制文件的读写 (1)二进制文件
11、的写 二进制文件的写通常要用到DataOutputStream类 格式如下: FileOutputStream out=new FileOutputStream(“路径和文件名”); DataOutputStream dos=new DataOutputStream(“out”); 或 DataOutputStream dos=new DataOutputStream( new FielOutputStream(“路径和文件名”)); 然后可以用DataOutputStream实现的方法向文件写入数据 dos.writeDouble(); dos.writeInt() 例12.4 把三个浮点数
12、写入文件myfile.dat的示例程序FileOutputDemo.java,12.4 文件流,(2)二进制文件的读 二进制形式文件的读,通常要用到DataInputStream类 格式如下: FileInputStream in=new FileInputStream(“路径和文件名“); DataInputStream dis=new DataInputStream(“in”); 当然也可以写成: DataInputStream dis=new DataInputStream( new FileInputStream(“路径和文件名“)); 然后用数据流的方法读入文件中的数据,如: dou
13、ble d=dis.readDouble(); int i=dis.readInt(); 见例12.5,例12.5 按二进制形式读入文件myfile.dat中的浮点数的示例程序FileInputDemo.java ,运行结果见下图,12.4 文件流,2 文本文件的读写 在Java中,采用的是Unicode字符。也就是说“1234”这个字符串的字符编码是00 31 00 32 00 33 00 34 Java提供了一个过滤流,可以用来弥补Unicode编码和本机操作系统采用的字符编码间不同造成的问题 如 FileInputStream fis=new FileInputStream(“myfil
14、e.txt”); InputStreamReader isr=new InputStreamReader(fis); 或 nputStreamReader isr=new InputStreamReader( new FileInputStream(“myfile.txt”); 或 FileReader fr=new FileReader(“myfile.txt”),12.4 文件流,(1)写文本文件 1)FileOutputStream 方法是: FileOutputStream out out = new FileOutputStream(“myfile.txt“); PrintStrea
15、m p = new PrintStream( out ); 用 p.println() 来写入数据,然后用 p.close() 关闭输入 例12.7 用FileOutputStream写入文本文件的示例程序FileOutputDemo.java 2)用 FileWriter 方法是: FileWriter fw = new FileWriter(“mydata.txt“); PrintWriter out = new PrintWriter(fw); 用out.print 或 out.println往文件中写入数据,写完后要用out.close() 关闭输出,用fw.close() 关闭文件
16、例12.8 用FielWriter来写入文本文件的示例程序FileWriteTest.java,12.4 文件流,2读文本文件 1) 用FileInputStream 方法是: FileInputStream fstream = new FileInputStream(args0); DataInputStream in = new DataInputStream(fstream); 用 in.readLine() 来得到数据,用 in.close() 关闭输入流 例12.9 用FileInputStream类读文本文件myfile.txt的示例程序FileInputDemo2.java,12.4 文件流,2)用FileReader 来读取文件的常用方法是: FileReader fr = new FileReader(“mydata.txt“); BufferedReader br = new BufferedReader(fr); 用br.readLing() 来读出数据,然后用br.close() 关闭