中,需要将MyData类型的对象内部保存的数据按照一定的格式存储到文件中,这里列举了2种基本数据类型boolean和int,以及两种引用数据类型String和数组,在下面的示例代码中将会以一定的格式写入到文件中。
import java.io.*;
/**
* 使用DataOutputStream书写具有一定格式的文件
*/
public class WriteFileUseDataStream {
public static void main(String[] args) {
short sh[] = {1,3,134,12};
MyData data =new MyData(true,100,"Java语言",sh);
//写入文件
writeFile(data);
}
/**
* 将MyData对象按照一定格式写入文件中
* @param data 数据对象
*/
public static void writeFile(MyData data){
FileOutputStream fos = null;
DataOutputStream dos = null;
try{
//建立文件流
fos = new FileOutputStream("test.my");
//建立数据输出流,流的嵌套
dos = new DataOutputStream(fos);
//依次写入数据
dos.writeBoolean(data.b);
dos.writeInt(data.n);
dos.writeUTF(data.s);
//写入数组
int len = data.sh.length;
dos.writeInt(len); //数组长度
//依次写入每个数组元素
for(int i = 0;i < len;i++){
dos.writeShort(data.sh[i]);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dos.close();
fos.close();
} catch (Exception e2){
e2.printStackTrace();
}
}
}
}
Java编程那些事儿90——装饰流使用1(3)
时间:2010-03-15 csdn 陈跃峰
在该示例代码中,首先建立一个实体流fos,该实体流连接到数据源——文件,然后以该实体流对象为基础,使用流的嵌套,建立装饰流对象dos,由于需要写入流中的对象data中包含的数据比较多,所以需要以一定的格式写入流,这里使用DataOutputStream避免自定义数据格式,而写入流中的顺序就是该流的格式,也就是文件test.my的格式,这种格式对于程序员来说是透明的。
使用对象dos中对应的writeXXX方法依次将需要存储的数据写入流中,在写入字符串时,为了使字符编码保持一致,一般使用writeUTF写入字符串,也就是先将字符串转换为utf-8格式的byte数组,然后再将该数组以一定的格式写入到流中。而在写入数组时,则首先写入数组的长度,然后再将数组的内容依次写入到流中,使用这种方式就可以很方便的将数组写入到流中。
这样文件test.my文件就具有了自己特定的文件格式,程序员需要记忆的就是该文件在写入时的写入顺序,可以很方便的使用DataInputStream读取出来。
下面的代码是使用DataInputStream读取test.my文件的代码,注意文件格式的处理。
import java.io.*;
/**
* 使用DataInputStream读取自定义格式的文件
*/
public class ReadFileUseDataStream {
public static void main(String[] args) {
MyData data = readFile();
System.out.println(data.b);
System.out.println(data.n);
System.out.println(data.s);
int len = data.sh.length;
for(int i = 0;i < len;i++){
System.out.println(data.sh[i]);
}
}
/**
* 从文件test.my中读取数据,并使用读取到的数据初始化data对象
* @return 读取到的对象内容
*/
public static MyData readFile(){
MyData data = new MyData();
FileInputStream fis = null;
DataInputStream dis = null;
try {
//建立文
|