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

19 篇文章 0 订阅

写二进制文件

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

运行结果:
在这里插入图片描述
注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦!

  • 39
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值