学习-Java输入输出之数据IO流之向文件中写入数字并读取
创始人
2024-03-15 15:32:28
0

任务描述

本关任务:使用数据 IO 流向给定文件中写入给定的 3 个 int 类型数字,并把这些数字分别读取出来。

相关知识

之前我们学习了 InputStream(字节输入流)和 OutputStream (字节输出流),下面我们来了解一下它们的间接子类---DataInputStream (数据输入流)和 DataOutputStream(数据输出流)。

DataOutputStream(数据输出流)

DataOutputStream 是 FilterOutputStream 的直接子类,而 FilterOutputStream 又是 OutputStream 的直接子类,所以 DataOutputStream 是 OutputStream 的间接子类。该流允许应用程序以与机器无关的方式将 Java 基本数据类型写到底层输出流。

DataOutputStream 的构造方法

下表中是它的构造方法:

构造方法说明
DataOutputStream(OutputStream out)使用底层输出流创建 DataOutputStream 对象

构造方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. // 通过文件字节输出流创建DataOutputStream对象
  3. DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("C:\\Users\\yy\\Desktop\\d.txt"));
  4. }

DataOutputStream 的常用方法

下表是它的常用方法:

方法说明
write(byte[] w,int off,int len)把字节数组中偏移量从 off 开始的 len 个字节写入此输出流
write(byte [] b)将字节数组写入此输出流
writeBooolean()、writeByte()、writeShort()、writeInt()将指定的基本数据类型以字节的方式写入到输出流
flush()刷新此输出流并强制写出所有缓冲的输出字节
writeUTF(String s)将字符串格式化顺序写入底层的输出流

常用方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. byte b[]={69,70,71,72};
  3. try(
  4. // 通过文件字节输出流创建DataOutputStream对象
  5. DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("C:\\Users\\yy\\Desktop\\d.txt"));) {
  6. // 将基本数据类型写入到输出流
  7. dataOutputStream.writeChar('a');
  8. dataOutputStream.writeInt(69);
  9. dataOutputStream.writeUTF("hello");
  10. // 将字节数组写入输出流
  11. dataOutputStream.write(b);
  12. }
  13. }

执行结果(在 d.txt 文件中写入了如下内容):

  1. a E helloEFGH

从以上代码中可以看出,DataOutputStream 不仅可以将像其它字节流一样把字节数组写入输出流,还可以将 Java 基本数据类型写入输出流。

DataInputStream (数据输入流)

DataInputStream 是 FilterInputStream 的直接子类,而 FilterInputStream 又是 InputStream 的直接子类,所以 DataInputStream 是 InputStream 的间接子类。该流允许应用程序以与机器无关的方式从底层输入流中读取基本 Java 数据类型。

DataInputStream 的构造方法

下表中是它的构造方法:

构造方法说明
DataInputStream(InputStream in)使用底层输入流创建一个DataInputStream 对象

构造方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. // 通过文件字节输入流创建DataInputStream对象
  3. DataInputStream dataInputStream = new DataInputStream(new FileInputStream("C:\\Users\\yy\\Desktop\\d.txt"));
  4. }

DataInputStream 的常用方法

下表是它的常用方法:

方法说明
read(byte[] r, int off, int len)从流中读入字节数据到缓冲区数组中指定位置,off 为数组偏移量,len 为写入长度。
read(byte [] b)从流中读入字节数据到缓冲区数组中
readBooolean()、readByte()、readShort()、readInt()从输入流中读取基本数据类型
readUTF()按照格式化顺序读底层的输入流

常用方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. try (
  3. // 通过文件字节输出流创建DataOutputStream对象
  4. DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("C:\\Users\\yy\\Desktop\\d.txt"));
  5. // 通过文件字节输入流创建DataInputStream对象
  6. DataInputStream dataInputStream = new DataInputStream(new FileInputStream("C:\\Users\\yy\\Desktop\\d.txt"));) {
  7. // 向文件顺序写出整数、boolean值、字符串
  8. dataOutputStream.writeInt(69);
  9. dataOutputStream.writeBoolean(true);
  10. dataOutputStream.writeUTF("java");
  11. // 按顺序读入数据
  12. int i = dataInputStream.readInt();
  13. Boolean bool=dataInputStream.readBoolean();
  14. String s = dataInputStream.readUTF();
  15. System.out.print("读入的整数:"+i+"。读入的boolean值:"+bool+"。读入的字符串:"+s);
  16. }
  17. }

执行结果:

  1. 读入的整数:69。读入的boolean值:true。读入的字符串:java

需要注意的是,要用 DataInputStream 读取一个文件,这个文件必须是由 DataOutputStream 写出的,否则会出现 EOFException 异常,因为 DataOutputStream 在写出的时候会做一些特殊标记,只有 DataInputStream 才能成功的读取。

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;public class FileTest {public static void main(String[] args) throws IOException {// 接收给定的数据Scanner scanner = new Scanner(System.in);String filedir = scanner.next();int num1 = scanner.nextInt();int num2 = scanner.nextInt();int num3 = scanner.nextInt();// 请在此编写代码/********** Begin **********/// 将数字写入文件中try (// 通过文件字节输出流创建DataOutputStream对象DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(filedir));DataInputStream dataInputStream = new DataInputStream(new FileInputStream(filedir));){dataOutputStream.writeInt(num1);dataOutputStream.writeInt(num2);dataOutputStream.writeInt(num3);// 从文件中读取数字,并输出结果int i = 0;while (i < 3){System.out.println("读取的数字为:" + dataInputStream.readInt());i ++;}}/********** End **********/}
}

 

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...