(Data 流)利用Data 流,完成下面操作:
1) 判断当前目录下是否存在一个test.txt的文件,如果该文件不存在,则往该文件中写入一个long 类型的数值:10000L
2) 如果该文件存在,则从该文件中读出数值,并把该数值加1 之后,再存回文件中。
package Ch03Homework;
import java.io.*;
public class DataStreamHomeWork {
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化字节流
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
DataInputStream dis = null;
DataOutputStream dos = null;
//获得当前目录
File f1 = new File(File.separator);
String path = "test.txt";
File f2 = new File(f1,path);
try {
//判断当前目录下是否存在一个test.txt的文件,如果该文件不存在
if(f2.exists() == false) {
fos = new FileOutputStream(f2,true);
bos = new BufferedOutputStream(fos);
dos = new DataOutputStream(bos);
// 则往该文件中写入一个long 类型的数值:10000L
dos.writeLong(10000);
dos.flush();
System.out.println("已保存到test.txt!");
}else {
//如果该文件存在,则从该文件中读出数值,并把该数值加1 之后,再存回文件中。
fis = new FileInputStream(f2);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
if(f2.length() != 0) {
fos = new FileOutputStream(f2,true);
bos = new BufferedOutputStream(fos);
dos = new DataOutputStream(bos);
long l = dis.readLong() + 1;
//System.out.println(l);
dos.writeLong(l);
dos.flush();
System.out.println("数值加一保存成功!");
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 要求用try-catch-finally 处理异常,并且关闭流应放在finally 块中。
try {
if(dis != null)dis.close();
if(dos != null)dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这段代码演示了文件的读写操作,并使用 DataInputStream
和 DataOutputStream
对文件中的数据进行读取和写入。下面对代码进行分析:
-
首先创建了几个输入输出流的对象:
FileInputStream
、BufferedInputStream
、FileOutputStream
、BufferedOutputStream
、DataInputStream
、DataOutputStream
。 -
通过指定文件名 "test.txt",构造一个
File
对象f2
,代表当前目录下的 "test.txt" 文件。 -
使用
exists()
方法检查文件是否存在,如果不存在,则创建文件输出流fos
、缓冲输出流bos
和数据输出流dos
,然后写入一个long
类型数值 10000 到文件中,刷新输出流,最后打印 "已保存到test.txt!"。 -
如果文件已经存在,则通过文件输入流
fis
、缓冲输入流bis
和数据输入流dis
读取文件中的long
类型数值。然后通过文件输出流fos
、缓冲输出流bos
和数据输出流dos
将读取到的数值加1后写回文件中,刷新输出流,最后打印 "数值加一保存成功!"。 -
在
finally
块中,关闭输入输出流。
总体来说,这段代码展示了如何使用不同类型的流来读写文件中的数据,以及如何处理异常和确保流在使用完毕后被关闭。