2009-7-29 北京理工大学计算机系(共 23页) 1
第十讲 文件与流操作北京理工大学计算机系 金旭亮
2009-7-29 北京理工大学计算机系(共 23页) 2
什么是文件?
用于存放大量的数据
当程序运行结束时其数据被永久地保存在文件中
文件保存在各种辅助存贮器中
磁盘
光盘
U盘(闪存)
2009-7-29 北京理工大学计算机系(共 23页) 3
文件的操作
File类
提供了文件或目录的有用信息
并不真正打开或存取文件
实例,FileDemo.java,简单地列出文件夹或文件信息。
更复杂的示例,FileTest.java,不仅列出文件夹信息,而且可以打开文件查看内容
2009-7-29 北京理工大学计算机系(共 23页) 4
如何选择文件?
使用 JFileChooser类
实例,ChooseFile.java
2009-7-29 北京理工大学计算机系(共 23页) 5
数据的基本单位
位?字符与字节?字段
记录?文件?数据库
互联网?…… RandyRed
1
01001010
J u d y
Judy Green
Sally Black
Tom Blue
Judy Green
Iris Orange
File
Record
Field
Byte (ASCII character J)
Bit
区分,ASCII码与 UNICODE码
2009-7-29 北京理工大学计算机系(共 23页) 6
文件的基本类型
2009-7-29 北京理工大学计算机系(共 23页) 7
随机存取的文件
要求文件中的记录是定长的
使用 RandomAccessFile类
100
bytes
100
bytes
100
bytes
100
bytes
100
bytes
100
bytes
0 100 200 300 400 500
byte offsets
2009-7-29 北京理工大学计算机系(共 23页) 8
随机存取文件示例
RandomAccessFileDemo.java
选择的记录数太大,引发 java.io.EOFException
2009-7-29 北京理工大学计算机系(共 23页) 9
文件的基本类型
2009-7-29 北京理工大学计算机系(共 23页) 10
Java中的文件理论
一连串有顺序的数据系列可以看成是一个流。
可以往流中读写数据。
Java将文件看成是一个字节流
文件有一个结束标记通常是一个特定的字节,称为
EOF;
0 1 2 3 4 5 6 7 8 9
...
n-1...
end-of-file marker
2009-7-29 北京理工大学计算机系(共 23页) 11
Java如何存取文件?
2009-7-29 北京理工大学计算机系(共 23页) 12
Java中的流
Java提供四个抽象的流基类:
InputStream和 OutputStream:以字节为单位,
是所有位输入与输出类的父类
Reader和 Writer:以字符( 2个字节)为单位
2009-7-29 北京理工大学计算机系(共 23页) 13
Java类库中的文件存取类
存放于包 java.io 中
基类,InputSream和 OutputStream
FileInputStream,以字节为单位输入
FileOutputStream
基类,Reader和 Writer
FileReader,以字符为单位
FileWriter
2009-7-29 北京理工大学计算机系(共 23页) 14
使用流对象读文件数据
代码实例:
1,FileInputStream fin=new FileInputStream(文件名 );
2,DataInputStream din=new DataInputSteam(fin);
3,Double s=din.readDouble();
说明:
1,DataInputStream提供了向流中写入常用数据类型的方法,如 int,char,double等
2,上述这种代码创建的对象首尾相接,称为流对象链,
链尾的对象是程序中真正用到的对象
2009-7-29 北京理工大学计算机系(共 23页) 15
按字符读写文本文件
FileWriter out=new FileWriter(“output.txt”)
相当于
FileWriter out=new FileWriter(
new FileOutputStream(“output.txt”))
FileReader类似
2009-7-29 北京理工大学计算机系(共 23页) 16
向文件中写入字串
PrintWriter out=new PrintWriter(
new FileWriter(“output.txt”)
2009-7-29 北京理工大学计算机系(共 23页) 17
从文件中读入字串
BufferedReader in=new BufferedReader(
New FileReader(“input.txt”);
String line=in.readLine();
2009-7-29 北京理工大学计算机系(共 23页) 18
顺序文件操作实例一:
DataFileTest.java
使用 PrintWriter将对象数据以,|”分隔写入到文件中,再使用 BufferedReader读出。
2009-7-29 北京理工大学计算机系(共 23页) 19
实例
键盘输入文字,保存到文件中。
BufferedReaderWriterDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 20
缓冲技术
Java使用了文件缓冲技术,其优点有:
提高了 I/O的性能
在内存中开辟一块区域,称为缓冲区
当缓冲区满时一次写入到磁盘中。
Java类
BufferedInputStream
BufferedOutputStream
2009-7-29 北京理工大学计算机系(共 23页) 21
缓冲技术实例
利用缓冲流复制文件
BufferedStreamDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 22
内存流
使用 ByteArrayInputStream和
ByteArrayOutputStream两个类将 Byte数组作为读写源头和目的地
实例,ByteArrayStreamDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 23
下一讲
介绍反射与串行化技术
第十讲 文件与流操作北京理工大学计算机系 金旭亮
2009-7-29 北京理工大学计算机系(共 23页) 2
什么是文件?
用于存放大量的数据
当程序运行结束时其数据被永久地保存在文件中
文件保存在各种辅助存贮器中
磁盘
光盘
U盘(闪存)
2009-7-29 北京理工大学计算机系(共 23页) 3
文件的操作
File类
提供了文件或目录的有用信息
并不真正打开或存取文件
实例,FileDemo.java,简单地列出文件夹或文件信息。
更复杂的示例,FileTest.java,不仅列出文件夹信息,而且可以打开文件查看内容
2009-7-29 北京理工大学计算机系(共 23页) 4
如何选择文件?
使用 JFileChooser类
实例,ChooseFile.java
2009-7-29 北京理工大学计算机系(共 23页) 5
数据的基本单位
位?字符与字节?字段
记录?文件?数据库
互联网?…… RandyRed
1
01001010
J u d y
Judy Green
Sally Black
Tom Blue
Judy Green
Iris Orange
File
Record
Field
Byte (ASCII character J)
Bit
区分,ASCII码与 UNICODE码
2009-7-29 北京理工大学计算机系(共 23页) 6
文件的基本类型
2009-7-29 北京理工大学计算机系(共 23页) 7
随机存取的文件
要求文件中的记录是定长的
使用 RandomAccessFile类
100
bytes
100
bytes
100
bytes
100
bytes
100
bytes
100
bytes
0 100 200 300 400 500
byte offsets
2009-7-29 北京理工大学计算机系(共 23页) 8
随机存取文件示例
RandomAccessFileDemo.java
选择的记录数太大,引发 java.io.EOFException
2009-7-29 北京理工大学计算机系(共 23页) 9
文件的基本类型
2009-7-29 北京理工大学计算机系(共 23页) 10
Java中的文件理论
一连串有顺序的数据系列可以看成是一个流。
可以往流中读写数据。
Java将文件看成是一个字节流
文件有一个结束标记通常是一个特定的字节,称为
EOF;
0 1 2 3 4 5 6 7 8 9
...
n-1...
end-of-file marker
2009-7-29 北京理工大学计算机系(共 23页) 11
Java如何存取文件?
2009-7-29 北京理工大学计算机系(共 23页) 12
Java中的流
Java提供四个抽象的流基类:
InputStream和 OutputStream:以字节为单位,
是所有位输入与输出类的父类
Reader和 Writer:以字符( 2个字节)为单位
2009-7-29 北京理工大学计算机系(共 23页) 13
Java类库中的文件存取类
存放于包 java.io 中
基类,InputSream和 OutputStream
FileInputStream,以字节为单位输入
FileOutputStream
基类,Reader和 Writer
FileReader,以字符为单位
FileWriter
2009-7-29 北京理工大学计算机系(共 23页) 14
使用流对象读文件数据
代码实例:
1,FileInputStream fin=new FileInputStream(文件名 );
2,DataInputStream din=new DataInputSteam(fin);
3,Double s=din.readDouble();
说明:
1,DataInputStream提供了向流中写入常用数据类型的方法,如 int,char,double等
2,上述这种代码创建的对象首尾相接,称为流对象链,
链尾的对象是程序中真正用到的对象
2009-7-29 北京理工大学计算机系(共 23页) 15
按字符读写文本文件
FileWriter out=new FileWriter(“output.txt”)
相当于
FileWriter out=new FileWriter(
new FileOutputStream(“output.txt”))
FileReader类似
2009-7-29 北京理工大学计算机系(共 23页) 16
向文件中写入字串
PrintWriter out=new PrintWriter(
new FileWriter(“output.txt”)
2009-7-29 北京理工大学计算机系(共 23页) 17
从文件中读入字串
BufferedReader in=new BufferedReader(
New FileReader(“input.txt”);
String line=in.readLine();
2009-7-29 北京理工大学计算机系(共 23页) 18
顺序文件操作实例一:
DataFileTest.java
使用 PrintWriter将对象数据以,|”分隔写入到文件中,再使用 BufferedReader读出。
2009-7-29 北京理工大学计算机系(共 23页) 19
实例
键盘输入文字,保存到文件中。
BufferedReaderWriterDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 20
缓冲技术
Java使用了文件缓冲技术,其优点有:
提高了 I/O的性能
在内存中开辟一块区域,称为缓冲区
当缓冲区满时一次写入到磁盘中。
Java类
BufferedInputStream
BufferedOutputStream
2009-7-29 北京理工大学计算机系(共 23页) 21
缓冲技术实例
利用缓冲流复制文件
BufferedStreamDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 22
内存流
使用 ByteArrayInputStream和
ByteArrayOutputStream两个类将 Byte数组作为读写源头和目的地
实例,ByteArrayStreamDemo.java
2009-7-29 北京理工大学计算机系(共 23页) 23
下一讲
介绍反射与串行化技术