学习-Java输入输出之数据IO流之向文件中写入数字并读取

任务描述

本关任务:使用数据 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 **********/
    }
}

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 首先,我们需要创建一个File对象来表示我们要写入数据文件。然后,我们可以使用FileOutputStream类来创建一个输出流,将数据写入文件。以下是示例代码: ``` import java.io.*; public class WriteToFile { public static void main(String[] args) { File file = new File("data.txt"); try { FileOutputStream fos = new FileOutputStream(file); for (int i = 1; i <= 10; i++) { fos.write(i); } fos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码,我们使用了一个for循环来写入数字1到10。每次循环,我们使用write()方法将一个数字写入文件。最后,我们关闭输出流。 接下来,我们需要读取文件数据。我们可以使用FileInputStream类来创建一个输入流,从文件读取数据。以下是示例代码: ``` import java.io.*; public class ReadFromFile { public static void main(String[] args) { File file = new File("data.txt"); try { FileInputStream fis = new FileInputStream(file); int data; while ((data = fis.read()) != -1) { System.out.print(data + " "); } fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码,我们使用了一个while循环来读取文件数据。每次循环,我们使用read()方法读取一个字节的数据,并将其存储在变量data。如果读取文件末尾,read()方法将返回-1,循环将结束。最后,我们关闭输入流。 通过以上代码,我们可以实现向文件写入数字读取的功能。 ### 回答2: 数据I/O流是Java输入和输出信息的重要工具,它可以被用来读写文件,网络连接和其他数据源和目标。向文件写入数字读取,是数据I/O流最基本的应用之一。以下是学习数据I/O流之向文件写入数字读取的几个主要步骤: 1. 创建文件。在Java程序文件的创建可以用File类的构造函数来完成。在调用File类的构造函数时,需要给定文件名和文件路径。例如,我们可以使用以下代码来创建一个名为“numbers.txt”的新文件: File file = new File("numbers.txt"); 2. 向文件写入数字。在Java程序数据I/O流的写入操作通常使用OutputStream类及其子类来完成。例如,我们可以使用以下代码向文件写入数字: try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file))) { dos.writeInt(10); dos.writeInt(20); dos.writeInt(30); } catch (IOException e) { e.printStackTrace(); } 在上述代码,我们使用了DataOutputStream类来将整数值写入文件。DataOutputStream类是OutputStream类的子类,可以将Java的基本数据类型转化为字节流并写入文件。 3. 从文件读取数字。在Java程序数据I/O流的读取操作通常使用InputStream类及其子类来完成。例如,我们可以使用以下代码从文件读取数字: try (DataInputStream dis = new DataInputStream(new FileInputStream(file))) { int firstNum = dis.readInt(); int secondNum = dis.readInt(); int thirdNum = dis.readInt(); System.out.println("The numbers in the file are " + firstNum + ", " + secondNum + ", " + thirdNum); } catch (IOException e) { e.printStackTrace(); } 在上述代码,我们使用了DataInputStream类来从文件按顺序读取整数值。DataInputStream类是InputStream类的子类,可以将字节流转化为Java的基本数据类型。 总之,学习数据I/O流之向文件写入数字读取Java编程的必要基础。掌握这一基本技能可以让我们更加容易地处理文件和其他数据源,并为更高级的应用打下坚实的基础。 ### 回答3: Java输入输出(IO)流是Java非常重要的一个概念,在Java我们通常使用流来进行数据读取写入操作。数据IO流就是流的一种,用来在程序和文件之间传输数据。简单的说,就是 Java程序通过数据IO流文件数据,在需要的时候从文件读取数据。 输入流(Input Stream) 和 输出流(Output Stream) 是Java IO包的两个重要的类,它们提供了从文件读取数据和向文件写入数据的功能。在学习数据IO流之前,需要了解一下Java文件类:File类。 File类用于描述文件或者目录,它的构造方法可以传入文件的路径或者文件句柄。File类提供了很多方法用于操作文件,比如:判断该文件是否存在(isExist),获取文件名(getName),获取文件路径(getPath)等等。 下面是向文件写入数字读取的示例代码: // 在文件写入数字 FileOutputStream fos = new FileOutputStream("temp.txt"); for(int i=0;i<5;i++){ fos.write(i); } fos.close(); // 从文件读取数字 FileInputStream fis = new FileInputStream("temp.txt"); int i; while((i = fis.read()) != -1){ System.out.println(i); } fis.close(); 上述代码,首先我们创建了一个名为“temp.txt”的文件,在该文件写入了5个数字。然后我们使用FileInputStream从该文件读取数字读取到-1标志文件读取结束。在读取过程,我们使用了一个while循环和一个用于读取每个字节的变量i。最后,程序输出了读取到的所有数字。 需要注意的是,在读取文件时,我们需要先判断是否已经读到了文件的结束,也就是判断读取到的字节数是否为-1。这是因为在Java,EOF(文件结束标志)被定义为-1。 总之,Java输入输出(IO)流是编程非常重要的一部分,掌握好它对编程会非常有帮助。对于使用Java-IO流进行文件读写操作,建议大家多进行练习,深入了解其使用方法,以便更好的掌握Java编程技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

摸鱼的三金

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

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

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

打赏作者

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

抵扣说明:

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

余额充值