深圳大学-Java程序设计实验-输入输出应用

实验目的

掌握I/O程序设计,能够读写本地文件等。

实验内容

1

编写一个程序,如果文件Exercisel_01.txt 不存在,就创建一个名为Exercisel_01.txt 的文件。向这个文件追加新数据。使用文本I/O将20个随机生成的整数写入这个文件。文件中的整数用空格分隔。

package problem1;

import java.io.*;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        String file_name = "Exercisel_01.txt";
        try {
            // 创建文件
            FileWriter file_writer = new FileWriter(file_name, true);
            PrintWriter print_writer = new PrintWriter(file_writer);
            // 生成数据
            Random random = new Random();
            for (int i = 0; i < 20; i++) {
                int randomNumber = random.nextInt(88) + 1;
                print_writer.print(randomNumber + " ");
            }
            print_writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果截图:
当文件Exercisel_01.txt 不存在时:
在这里插入图片描述
运行结果为:
在这里插入图片描述
文件内容为:
在这里插入图片描述
当文件Exercisel_01.txt 存在时:
在这里插入图片描述
文字说明:
该程序用于创建一个名为 “Exercisel_01.txt” 的文本文件,向其中追加生成的20个随机整数数据。若不存在该文件,则创建文件并写入内容,若存在,则向文件追加内容。程序使用 FileWriter 和 PrintWriter 类来实现文件写入,FileWriter 的构造函数中的true参数表示以追加模式打开文件,确保新的数据追加到文件末尾而不是覆盖原有内容。然后通过使用 Random 类生成范围在1到88之间的随机整数,并将这些数字以空格分隔的形式写入文件。最后,通过关闭 PrintWriter 完成文件写入操作。

2

编写一个程序,如果文件Exercisel_02.dat 不存在,就创建一个名为Exercisel_02.dat 的文件。向这个文件追加新数据。使用二进制I/O 将20个随机生成的整数写入这个文件中。利用二进制I/O读取这个文件中的内容并显示。

package problem2;
import java.io.*;
import java.util.Random;
public class Main {
    public static void main(String[] args) {
        String file_name = "Exercisel_02.dat";
        try {
            // 创建文件并追加数据
            FileOutputStream f = new FileOutputStream(file_name, true);
            DataOutputStream d = new DataOutputStream(f);
            // 生成随机整数数据并写入文件
            Random random=new Random();
            for (int i = 0; i < 20; i++) {
                int randomNumber = random.nextInt(88) + 1;
                d.writeInt(randomNumber);
            }
            d.close();
            // 读取文件内容
            FileInputStream ff = new FileInputStream(file_name);
            DataInputStream dd = new DataInputStream(ff);
            System.out.println("文件内容:");
            while (dd.available() > 0) {
                int number = dd.readInt();
                System.out.print(number + " ");
            }
            dd.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果截图:
不存在Exercisel_02.dat的时候:
在这里插入图片描述运行结果为:
在这里插入图片描述
存在Exercisel_02.dat文件时,运行结果为:
在这里插入图片描述
文字说明:
该程序用于创建一个名为 “Exercisel_02.dat” 的文本文件,向其中追加生成的20个随机整数数据。若不存在该文件,则创建文件并写入内容,若存在,则向文件追加内容。程序使用 FileOutputStream 和 DataOutputStream 类来实现文件写入。FileOutputStream 的构造函数中的 true 参数表示以追加模式打开文件,确保新的数据追加到文件末尾而不是覆盖原有内容,然后使用 Random 类生成范围在1到88之间的随机整数,并将这些整数以二进制形式写入文件。然后,通过使用 FileInputStream 和 DataInputStream 类来读取文件内容,打印出文件中的所有整数数据。最后,通过关闭相应的输入输出流来完成文件读写操作。

3

对一个学生成绩单进行读写操作。请直接下载blackboard上提供的data.txt文件作为数据源。具体要求如下:
a) 新建一个可序列化的Student类,其中包括四个成员变量:int型学号、String类型学生名字、String类型学生所在学院、int型成绩(参考data.txt文件)。重写toString方法用于打印Student对象。
b) 使用BufferedReader从data.txt文件中读取数据,并存放到一个集合对象中,要求按照学生名字的字母顺序升序排列。
c) 创建一个本地文件output.txt,将集合中的数据序列化到此文件中。
d) 将output.txt中的数据反序列化,按照降序输出所有成绩在92分以上的学生信息;如果学生成绩相同,则按照学生名字的字母顺序降序输出。

package problem3;

import java.io.*;
import java.util.*;

//要求a
class Student implements Serializable {
    private int id;
    private String name;
    private String college;
    private int grade;

    public Student(int id_value, String name_value, String college_value, int grade_value) {
        this.id = id_value;
        this.name = name_value;
        this.college = college_value;
        this.grade = grade_value;
    }

    public int get_grade() {
        return grade;
    }

    public String get_name() {
        return this.name;
    }

    @Override
    public String toString() {
        return name + " " + id + " " + college + " " + grade;
    }
}

public class Main {
    public static void main(String[] args) {
        //要求b
        List<Student> students = new ArrayList<>();

        try (BufferedReader r = new BufferedReader(new FileReader("data.txt"))) {
            String line;
            while ((line = r.readLine()) != null) {
                String[] student_data = line.split(" ");
                int id = Integer.parseInt(student_data[0]);
                String name = student_data[1];
                String college = student_data[2];
                int grade = Integer.parseInt(student_data[3]);

                Student student = new Student(id, name, college, grade);
                students.add(student);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        Collections.sort(students, (s1, s2) -> s1.get_name().compareTo(s2.get_name()));
        //要求c
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
            for (Student student : students) {
                writer.write(student.toString());
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //要求d
        //筛选出成绩在92分以上的学生
        List<Student> target_students = new ArrayList<>();
        for (Student student : students) {
            if (student.get_grade() > 92) {
                target_students.add(student);
            }
        }

        // 按照降序排序
        Collections.sort(target_students, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                if (s1.get_grade() != s2.get_grade()) {
                    return Integer.compare(s2.get_grade(), s1.get_grade());
                } else {
                    return s2.get_name().compareTo(s1.get_name());
                }
            }
        });

        // 输出结果
        for (Student student : target_students) {
            System.out.println(student);
        }
    }
}

运行结果截图:
生成的output.txt的内容:
在这里插入图片描述
要求d的输出结果↓
在这里插入图片描述
文字说明:
该代码首先新建了一个可序列化的Student类,其中包括四个成员变量:int型学号、String类型学生名字、String类型学生所在学院、int型成绩,并重写了toString方法用于打印Student对象。在main方法中,使用BufferedReader从data.txt文件中读取数据,并存放到一个集合对象中,然后按照学生名字的字母顺序升序排列,完成了要求b。接着通过 BufferedWriter 将 students 集合中的学生信息写入"output.txt"文件,每行一个学生信息,完成了要求c。最后,先筛选出成绩92分以上的学生,然后按照降序输出所有成绩在92分以上的学生信息,如果学生成绩相同,则按照学生名字的字母顺序降序输出,完成了要求d。

深圳大学Java程序设计课程中涉及到了网络编程应用。网络编程是指通过网络进行数据交互的程序设计方式。 在网络编程中,我们需要使用Java提供的一些类库和API来实现网络通信。Java中提供了一套完善的网络编程工具,包括Socket编程、ServerSocket编程、URL编程等。 Socket编程是实现网络通信的基本方式之一,它是一种面向连接的通信方式。通过创建一个Socket对象,程序可以与远程服务器进行连接,并进行数据的发送和接收。使用Socket编程,我们可以实现客户端和服务器之间的通信,实现从客户端向服务器发送请求,服务器处理请求并返回结果的功能。 ServerSocket编程是一种服务器端的网络编程方式,它可以接收客户端的连接请求并与之建立连接。通过创建一个ServerSocket对象,并调用其accept()方法,服务器可以等待客户端的连接请求,并将连接请求转交给一个新的Socket对象进行处理。使用ServerSocket编程,我们可以实现服务器的功能,接收来自多个客户端的请求,并处理这些请求。 URL编程是一种用于访问远程资源的网络编程方式。通过创建一个URL对象,并调用其openConnection()方法,我们可以建立与远程服务器的连接,并获取服务器返回的数据。使用URL编程,我们可以实现通过HTTP协议获取网页内容、下载文件等功能。 在深圳大学Java程序设计课程中,我们将学习如何使用这些网络编程的工具和技术,并实践一些网络应用开发。通过这门课程的学习,我们可以掌握网络编程的基本原理和常用技术,提升自己的Java程序设计能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值