.dat不用事先创立,如果之前没有文件的话用了FileOutputSream方法会给你创造一个文件。
经过调试可以看出来,如果改一下代码,在输出,发现之前的内容没有了,是因为直接用FileOutputSream方法是会删除文件的当前内容的,直接赋予新内容。如果想要追加内容的话在后面用个true。
FileOutputStream output= new FileOutputStream(“temp.dat”,true);
package binaryIO;
import java.io.*;
public class TestFileStream {
public static void main(String[] args)throws IOException{
FileOutputStream output= new FileOutputStream("temp.dat"); //为文件创造一个FileInputSream对象
for(int i=1;i<=10;i++)
output.write(i);
output.close(); //千万记得关闭流,否则可能造成数据受损或者导致其他的程序错误
FileInputStream input=new FileInputStream("temp.dat"); //直接写得到的文件是和类的根目录一样的,可以自己改变路径,写进去就是了
int value;
while((value=input.read())!=-1) //在流的末尾返回的是-1,如果不到末尾就输出
System.out.print(value+" ");
input.close();
}
}
目录在这里,and~直接开.dat是打不开的:
结果:
在dos里面操作一下:
下面那个奇奇怪怪的符号就是二进制的数据
补充一个稍微复杂一点的,下面两个类是一个例子
这是一个把对象作为传递的东西在二进制文件之间读写。注意read的时候用了强制转换,还有就是输入流多throw了一个nodefoundexception ,java虚拟机在read这个对象的时候,还没有加载他的类,就会出现异常。
package binaryIO;
import java.io.*;
public class TestObjectOutputStream {
public static void main(String[] args) throws IOException{
ObjectOutputStream output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("object.dat")));
output.writeUTF("Jhone");
output.writeDouble(85.5);
output.writeObject(new java.util.Date());
output.close();
}
}
package binaryIO;
import java.io.*;
public class TestObejectInputStream {
public static void main(String[] args)throws ClassNotFoundException,IOException{
ObjectInputStream input=new ObjectInputStream(new FileInputStream("object.dat"));
String name=input.readUTF();
double score=input.readDouble();
java.util.Date date=(java.util.Date)(input.readObject());
System.out.println(name+" "+score+" "+date);
input.close();
}
}