JAVA流式输入输出与文件处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流式输入输出与文件处理

实验目的

(1) 掌握字节流和字符流的特点和处理差异;

(2) 掌握过滤流的使用;

(3) 掌握File类的使用;

(4) 掌握随机文件的使用。

(5) 掌握对象系列化的概念以及访问文件时对象读写方法。

知识要点

1 面向字节的输入/输出流

(1)类InputStream是面向字节的输入流的根。其主要方法见表13-1。

表13-1 类InputStream的方法

该流实现DataInput接口,主要方法有:readByte(),readBoolean()、

readShort()、readChar()、readInt() 、readLong()、readFloat()、readDouble()、readUTF()等。

(3)类OutputStream是面向字节输出流的根,其主要方法有:

●void write(int b) :将参数b的低字节写入输出流

●void write(byte b[]) :将字节数组全部写入输出流

●void write(byte b[],int offset, int len):将字节数组中从b[offset]开始处的len个字节写入至输出流。

(4)类DataOutputStream实现各种类型数据的输出处理,它实现了DataOutput接口,主要方法有:writeByte(int)、writeBytes(String)、writeBoolean(boolean)、writeChars(String)、writeInt(int) 、writeLong()、writeFloat(float)、writeDouble(double)、writeUTF(String)等。

2 面向字符的输入与输出流

类Reader是面向字符的输入流的根,其提供的方法与InputStream类似,只是将基于Byte的参数改为基于Char。

类Writer是面向字符的输出流类的根,其提供的方法与OutputStream类似,只是将基于Byte的参数改为基于Char。

类InputStreamReader是一个特殊的流,用来将面向字节的数据流包装转换为面向字符的流。常用于从键盘获取输入数据。例如,从键盘输入一行字符串,可以用BufferedReader的readLine()方法,但在此前必须使用InputStreamReader将字节流转化为字符流。

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

String x=in.readLine()

3 文件的顺序读写

(1)面向字节的文件访问

●以二进制文件作为数据源。FileInputStream类和FileOutputStream类分别用于文件的读、写访问。

●利用InputStream和OutputStream的方法可实现文件的读写操作。

●可用DataInputStream对FileInputStream流进行过滤;用DataOuputStream对FileOutputStream流进行过滤,以实现特定数据类型数据的读写。

(2)面向字符的文件访问

●以字符文件作为数据源。包括:FileReader类和FileWriter类分别用于字符文件的读、写访问。

●基于字符流的数据读写方法与基于字节流的类似,只是将读写的单位由字节改为字符,方法中的字节数组参数相应改为字符数组。例如:

int read(char b[])表示从文件读数据填满数组,返回读到的字符数。

●可用BufferedReader对FileReader流进行过滤;用BufferedWriter对FileWriter流进行过滤,其中包含newLine()方法可写入一个换行。

4 File类

借助File对象,可以获取文件和相关目录的属性信息。其主要方法见表13-2。

表13-2 File类的主要方法

创建随机访问文件对象时要指定文件访问的“rw”参数,也就是它可以对同一打开文件进行读写两种访问。RandomAccessFile类实现了DataInput和DataOutput接口,为支持流的随机读写,RandomAccessFile类还添加定义了如下方法:

●long getFilePointer():返回当前指针;

●void seek(long pos):将文件指针定位到一个绝对地址;

●long length():返回文件的长度

注意:地址是相对于文件头的偏移量。地址0表示文件的开头。

6 对象序列化

(1)对象输入流ObjectInputStream和对象输出流ObjectOutputStream将Java流系统扩充到能输入输出对象,它们提供的writeObject()和readObject()方法实现了对象的串行化(Serialized)和反串行化(Deserialized)。

(2)用对象输入流的readObject()方法必须捕捉ClassNotFoundException异常。

(3)为了实现用户自定义对象的串行化,相应的类必须实现Serializable接口,否则,不能以对象形式正确写入文件。Serializable接口是一个不含任何具体内容的接口。

3 样例程序

样例1: 编写一个程序实现任意文件的拷贝功能,源文件和目的文件名由命令行参数提供。

【参考程序】

import java.io.*;

public class CopyFile {

public static void main(String args[]) {

if ( args.length<2) {

System.out.println("usage: java CopyFile sourcefile

targetfile");

System.exit(0);

}

相关文档
最新文档