学习Java,你需要知道这些——输入输出流(二)

写二进制文件

抽象类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();
    }
}

运行结果:
在这里插入图片描述

原创文章 477 获赞 911 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_41505957/article/details/106090772