写二进制文件
抽象类OutputStream
- 派生类FileOutputStream
用于一般目的输出(非字符输出) ;
用于成组字节输出。 - 派生类DataOutputStream
具有写各种基本数据类型的方法;
将数据写到另一个输出流;
它在所有的计算机平台上使用同样的数据格式;
其中size方法,可作为计数器,统计写入的字节数。
将int写入文件
- 将三个int型数字255/0/ -1写入数据文件datal.dat
import java.io.*;
class FileOutputstreamTester {
public static void main ( String[] args) {
String fileName = "data1.dat";
int value0 = 255, value1 = 0, value2 = -1;
try {
DataOutputStream out = new DataOutputStream(
new FileOutputStream( fileName ) );
out.writeInt( value0 );
out.writeInt( value1 );
out.writeInt( value2 );
out.close();
}
catch (IOException iox){
System.out.println("Problem writing"+ fileName);
}
}
}
- 运行结果
运行程序后,生成数据文件data1.dat
用写字板打开没有任何显示
用ultraEdit打开查看其二进制信息,内容为00 00 00 FF 00 00 00 00 FF FF FF FF,每个int数字都是32个bit的 - 说明
FileOutputStream类的构造方法负责打开文件"data1.dat"用于写数据
FileOutputStream类的对象与DataOutputStream对象连接,写基本类型的数据
BufferedOutputStream类
用法示例:
DataOutputStream out = new DataOutputStream(new BufferedOutputStream( new FileOutputStream( fileName )));
向文件写入多种数据,统计字节数
import java.io.*;
class BufferedOutputStreamTester {
public static void main ( String[] args ) throws IOException {
String fileName = "mixedTypes.dat" ;
DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream( fileName )));
dataOut.writeInt(0);
System.out.println( dataOut.size() + " bytes have been written.");
dataOut.writeDouble( 31.2 );
System.out.println( dataOut.size() + " bytes have been written.");
dataOut.writeBytes("JAVA");
System.out.println( dataOut.size() + " bytes have been written.");
dataOut.close();
}
}
运行结果:
读二进制文件
读取二进制文件中的3个int型数字并相加
import java.io.*;
class DataInputStreamTester {
public static void main ( String[] args ){
String fileName = "data1.dat";
int sum = 0;
try{
DataInputStream instr = new DataInputStream(new BufferedInputStream(new FileInputStream( fileName )));
sum += instr.readInt();
sum += instr.readInt();
sum += instr.readInt();
System.out.println( "The sum is:" + sum );
instr.close();
}
catch ( IOException iox ) {
System.out.println("Problem reading"+ fileName );
}
}
}
运行结果:
通过捕获异常控制读取结束
- 可以读取文件中的数据直到文件结束
import java.io.*;
class DataInputStreamTester {
public static void main ( String[] args ) {
String fileName = "data1.dat" ; long sum = 0;
try{
DataInputStream instr = new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));
try{
while ( true ){
sum += instr.readInt();
}
}
catch ( EOFException eof ) {
System.out.println( "The sum is:" + sum );
instr.close();
}
}
catch ( IOException iox){
System.out.println("IO Problems with" + fileName );
}
}
}
用字节流读取文本文件
import java.io.*;
public class InputStreamTester {
public static void main(String[] args) throws IOException {
FileInputStream s=new FileInputStream("Hello.txt");
int c;
while ((c = s.read())!= -1) //读取1字节,结束返回-1
System.out.write(c);
s.close();
}
}
运行结果: