二进制文件
- 狭义上,采用字节编码,非字符编码的文件
- 广义上,一切文件都是二进制文件
- 用记事本等无法打开/阅读
二进制文件读写
- 输出数据到文件中
- 从文件中读取数据
写文件
- 先创建文件,写入数据,关闭文件
- FileOutputStream
- BufferedOutputStream
- DataOutPutStream
- flush 刷新缓存
- write/writeBoolean/writeByte/writeDouble/writeInt/WriteUTF/···
- try-resouce语句,自动关闭资源
- 关闭最外层的数据流,将会把其上所有的数据流关闭
import java.io.*;
public class BinFileWrite{
public static void main(String[] args) throws Exception{
writeFile();
System.out.println("done.");
}
public static void writeFile() {
FileOutputStream fos = null;
DataOutputStream dos = null;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream("c:/temp/def.dat"); // 节点类
bos = new BufferedOutputStream(fos); //装饰类
dos = new DataOutputStream(bos); // 装饰类
dos.writeUTF("a");
dos.writeInt(20);
dos.writeInt(180);
dos.writeUTF("b");
} catch (Exception ex) {
ex.printStackTrace();
} finally {//关闭打开的文件资源
try {
dos.close(); // 关闭最后一个类,会将所有的底层流都关闭
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
读文件
- 先打开文件,读入数据,关闭文件
- FileInputStream
- BufferedInputStream
- DataInputStream
- read;readBoolean;readDouble;readFloat;readInt;readUTF
- try-resource语句,自动关闭资源
- 关闭最外层数据流,将会把其上所有的数据流关闭
import java.io.*;
public class BinFileRead{
public static void main(String[] args) throws Exception{
readFile();
}
public static void readFile() {
//try-resource
try (DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("c:/temp/def.dat")))) {
String a, b;
int c, d;
a=dis.readUTF();
c=dis.readInt();
d=dis.readInt();
b=dis.readUTF();
System.out.println("a: "+a);
System.out.println("c: "+c);
System.out.println("d: "+d);
System.out.println("b: "+b);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
输出结果:
a: a
c: 20
d: 180
b: b