Java程序设计——文件IO

一、题目:

        数字存取操作:让用户输入8个整数,将这些数写入文件num.txt中;然后从该文件读取这些数,在内存中对它们进行逆序排序,再打印输出结果。

要求:分别使用字节流字符流操作方式完成。

提示:保存时把数字转为字符串,再写入文件;读取时,以字符串读出来,再解析为数字。

二、实验设计

a、设计思路:

       这个程序的主要目标是实现一个数字存取和排序的操作,它可以分为五个主要步骤:

  1. 数据输入:首先,程序需要从用户那里获取一组数字。这里,我们选择了8个整数作为输入。
  2. 数据存储:接着,程序需要将这些数字存储起来。在这个程序中,我们选择将这些数字存储在一个文本文件中。
  3. 数据读取:然后,程序需要从存储设备中读取这些数字。在这个程序中,我们从之前存储数字的文本文件中读取数据。
  4. 数据处理:读取数据后,程序需要对这些数字进行处理。在这个程序中,我们选择对这些数字进行逆序排序。
  5. 数据输出:最后,程序需要将处理后的结果输出给用户。

b、主要代码结构:

  1. 输入阶段:使用Scanner类从用户那里获取8个整数。
  2. 写入阶段:使用FileOutputStream或FileWriter将这些整数写入到文件num.txt中。
  3. 读取阶段:使用FileInputStream或FileReader和BufferedReader从文件num.txt中读取这些整数。
  4. 排序阶段:使用Arrays.sort方法对这些整数进行排序。
  5. 输出阶段:打印输出排序后的结果。

c、主要代码段的文字分析:

  • 字节流操作:在这部分中,我们使用FileOutputStream和FileInputStream来进行文件的写入和读取操作。在写入文件时,我们将每个整数转换为字节,并写入到文件中。在读取文件时,我们读取文件中的所有字节,并将其转换为字符串。然后,我们将这些字符串解析为整数,并进行逆序排序。
  • 字符流操作:在这部分中,我们使用FileWriter和FileReader来进行文件的写入和读取操作。在写入文件时,我们将每个整数转换为字符串,并写入到文件中。在读取文件时,我们使用BufferedReader来一行一行地读取文件。然后,我们将这些字符串解析为整数,并进行逆序排序。这部分的操作与字节流操作类似,只是在处理字符数据时,字符流操作更为方便。

d、输出结果截图:

图2-1

三、总结

        在字节流操作的代码中,我们使用了FileOutputStreamFileInputStream来进行文件的写入和读取。这两个类都是字节流类,它们以字节为单位进行操作,因此在处理非文本文件(如图片、音频等)时,效果更好。

        在字符流操作的代码中,我们使用了FileWriterFileReader来进行文件的写入和读取。这两个类都是字符流类,它们以字符为单位进行操作,因此在处理文本文件时,效果更好。

        这两段代码都很好地完成了题目的要求,展示了字节流和字符流在文件操作中的应用。在实际编程中,我们可以根据需要选择使用字节流还是字符流。如果处理的是文本文件,那么字符流可能是更好的选择;如果处理的是非文本文件,那么字节流可能是更好的选择。这两种流操作方式各有优势,需要根据实际情况灵活选择。这也是我们在学习和使用Java I/O流时需要掌握的重要知识点。

四、附录代码

//字节流操作:
import java.io.*;
import java.util.*;

public class ByteStreamExample {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int[] numbers = new int[8];
        System.out.println("请输入8个整数:");
        for (int i = 0; i < 8; i++) {
            numbers[i] = scanner.nextInt();
        }

        // 写入文件
        FileOutputStream fos = new FileOutputStream("num.txt");
        for (int i = 0; i < 8; i++) {
            fos.write((numbers[i] + "\n").getBytes());
        }
        fos.close();

        // 读取文件
        FileInputStream fis = new FileInputStream("num.txt");
        byte[] bytes = new byte[fis.available()];
        fis.read(bytes);
        fis.close();
        String[] strNumbers = new String(bytes).split("\n");

        // 解析为数字并逆序排序
        for (int i = 0; i < 8; i++) {
            numbers[i] = Integer.parseInt(strNumbers[i]);
        }
        Arrays.sort(numbers);
        System.out.println("逆序排序后的结果:");
        for (int i = 7; i >= 0; i--) {
            System.out.println(numbers[i]);
        }
    }
}
//字符流操作:
import java.io.*;
import java.util.*;

public class CharStreamExample {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int[] numbers = new int[8];
        System.out.println("请输入8个整数:");
        for (int i = 0; i < 8; i++) {
            numbers[i] = scanner.nextInt();
        }

        // 写入文件
        FileWriter fw = new FileWriter("num.txt");
        for (int i = 0; i < 8; i++) {
            fw.write(numbers[i] + "\n");
        }
        fw.close();

        // 读取文件
        FileReader fr = new FileReader("num.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;
        int i = 0;
        while ((line = br.readLine()) != null) {
            numbers[i++] = Integer.parseInt(line);
        }
        br.close();

        // 逆序排序
        Arrays.sort(numbers);
        System.out.println("逆序排序后的结果:");
        for (i = 7; i >= 0; i--) {
            System.out.println(numbers[i]);
        }
    }
}

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值