程序执行结果:
图9-5 缓冲流类使用
2.FileInuputStream类与FileOutputStream类 FileInuputStream类是InputSteam类的子类,FileOutputStream类是OutputStream类的子类。这两个类主要用于文件的输入与输出,创建的对象可以顺序地从本地机上的文件中读数据或写数据。
(1)FileInuputStream类的常用构造方法: FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj)
通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到
文件系统中某个实际文件的现有连接。
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件
系统中的路径名 name 指定。
(2)FileOutputStream类的常用构造方法: FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 FileOutputStream(FileDescriptor fdObj)
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示
一个到文件系统中的某个实际文件的现有连接。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。 FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。 【例9-4】 将键盘输入的一行字符串添加到本地文件a.txt中。 import java.io.*;
public class Exam9_4{ void run(){
int num;
byte input[]=new byte[256];
BufferedInputStream bin=new BufferedInputStream(System.in); try{
System.out.println(\请输入:\ num=bin.read(input);
FileOutputStream fout=new FileOutputStream(\ //创建文件输出流对象,文件名为“a.txt” fout.write(input,0,num); bin.close(); fout.close();
}catch(IOException e){
System.out.println(\错误!\ } }
public static void main(String args[]){ Exam9_4 ee=new Exam9_4(); ee.run(); } }
程序分析:
本程序运行之后,如果当前目录下无a.txt文件,会自动创建,并将键盘输入的内容写入该文件中。如果当前目录下已有该文件,则自动添加到文件的尾部。
【例9-5】 读出当前目录下的文件a.txt,并显示在屏幕上。 import java.io.*;
public class Exam9_5{ void run(){
byte input[]=new byte[256]; try{
FileInputStream fin=new FileInputStream(\ //用文件名“a.txt”创建文件字节输入流对象fin
System.out.println(\文件a.txt的内容为:\ while(fin.read(input)!=-1)
//从文件中逐个读字节到字节数组input中,直到文件结束 {
System.out.println(new String(input)); //将数组input中的字节在屏幕上以字符方式显示 }
fin.close();
}catch(IOException e){
System.out.println(\错误!\ }
}
public static void main(String args[]){
Exam9_5 ee=new Exam9_5(); ee.run(); } }
程序分析:
程序执行后,可将当前目录下a.txt文件的内容在屏幕上显示出来。如果当前目录下没有a.txt文件,系统会捕获错误。
FileInuputStream类的read(byte b[])方法继承于InuputStream类,可将文件输入的内容读入缓冲数组b[],将返回一个整数值,当读入内容为空时,返回值为-1。
3.DateInuputStream类与DateOutputStream类
上面介绍的FileInputStream类和FileOutputStream类来处理字节数据,但有时需要处理的数据不一定是字节数据。如读写int型、float型、double型的数据时,一次需要读写几个字节,需要专门的数据输入输出流来处理。
DateInuputStream类和DateOutputStream类分别实现了java.io包中的DataInput和DataOutput接口,能够读写Java基本类型的数据和Unicode编码格式的字符串。这样,在输入输出数据时就不必关心该数据究竟包含几个字节了。
DateInuputStream类和DateOutputStream类是从过滤流类继承过来的,这两个流的对象均不能独立地实现数据的输入和输出处理,必须与其他输入流和输出流对象一起使用,才能实现不同类型数据的读写。这两个类与FileInputStream类和FileOutputStream类相配合可以完成对格式数据的读写。
DateInuputStream类的构造方法: DataInputStream(InputStream in)
使用指定的基础 InputStream 创建一个 DataInputStream。 DateOutputStream类的构造方法: DataOutputStream(OutputStream out)
创建一个新的数据输出流,将数据写入指定基础输出流。 常用方法见表9-1。
表9-1 数据输入输出流读写数据的常用方法 DataInputStream类的读方法 int read(byte[] b) int read(byte[] b, int off, int len) boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat() void readFully(byte[] b) void readFully(byte[] b, int off, int len) int readInt() long readLong() short readShort() int readUnsignedByte() int readUnsignedShort() DataOutputStream类的写方法 void write(byte[] b, int off, int len) void write(int b) void writeBoolean(boolean v) void writeByte(int v) void writeBytes(String s) void writeChar(int v) void writeChars(String s) void writeDouble(double v) void writeFloat(float v) void writeInt(int v) void writeLong(long v) void writeShort(int v) void writeUTF(String str) String readUTF() static String readUTF(DataInput in) 如果要完成对文件中各种数据的读出,需要将一个文件输入流对象fin与一个格式输入流对象din相连。
FileInputStream fin=new FileInputStream(“password.dat”); DataInputStream din=new DataInputStream(fin);
同样,如果要完成对文件中各种数据的写入,需要将一个文件输出流对象fout与一个格式输出流对象dout相连。
FileInputStream fout=new FileInputStream(“password.dat”); DataInputStream dout=new DataInputStream(fout);
设置好之后,就可以使用格式输入输出流对象的常用方法读写数据了。 【例9-6】 写入文件student.dat中一条记录,no(int),name(String),score(double)。 import java.io.*;
public class Exam9_6{ void run(){ try{
FileOutputStream fout=new FileOutputStream(\ DataOutputStream dout=new DataOutputStream(fout); dout.writeInt(1);
dout.writeUTF(\李小平\ dout.writeDouble(95); dout.close(); fout.close();
}catch(IOException e){
System.out.println(\文件错误!\ } }
public static void main(String args[]){ Exam9_6 ee=new Exam9_6(); ee.run(); } }
程序分析:
DataOutputStream类与FileOutputSteam类相同,都可以向文件写入内容,当目录下无该文件时,可自动创建文件,但不同的是,如果当前文件有内容,FileOutputSteam类的write()方法会在文件最后追加一条新内容,而DataOutputStream类的write()方法则将原来的内容覆盖。FileOutputSteam类写入的内容是一般的字节文件,可用如记事本等编辑器查看,而DataOutputSteam类是按格式写入的不同类型的二进制编码,无法用一般的编辑器查看。可以使用DataInputSteam类的read()方法读出。例9-7给出了读二进制文件的示例。
【例9-7】 读出文件student.dat的内容,并在屏幕上显示出来。 import java.io.*;
public class Exam9_7{
public static void main(String args[]){
相关推荐: