Java程序设计:选实验6 输入输出应用

这篇具有很好参考价值的文章主要介绍了Java程序设计:选实验6 输入输出应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

package 选实验6;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class task1 {
	public static void main(String[] args)
	{
		String fileName = "Exercise_01.txt";
		
		//检查文件是否存在,如果不存在则创建
		File file = new File(fileName);
		try {
			if(!file.exists()) {
				file.createNewFile();
				System.out.println(fileName+"已创建。");
			}
			//写入20个随机数字
			BufferedWriter writer = new BufferedWriter(new FileWriter(fileName,true));
			Random random = new Random();
			for(int i=0;i<20;i++)
			{
				int num = random.nextInt();
				//每个整数之间用空格隔开
				writer.write(Integer.toString(num)+" ");
			}
			//关闭BufferWriter,确保资源被释放
			writer.newLine();
			writer.close();
			System.out.println(fileName+"已被写入数据。");
			
			//打开文件并读取内容和打印内容
			BufferedReader reader = new BufferedReader(new FileReader(file));
			String lineString;
			System.out.println(fileName+"里面的内容为:");
			while((lineString = reader.readLine())!=null) 
			{
				System.out.println(lineString);
			}
			reader.close();
			
		}
		catch(IOException e) {
			e.printStackTrace();
		}
		//删除文件,以便能够多次运行
		if (file.delete()) {
            System.out.println(fileName+"已删除。" );
        } else {
            System.out.println(fileName+"无法删除");
        }
	}
}

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

package 选实验6;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

public class task2 {
	public static void main(String[] args) {
		String fileName = "Exercisel_02.dat";
		
		//检查文件是否存在,如果不存在则创建
		File file = new File(fileName);
		try {
			if(!file.exists())
			{
				file.createNewFile();
				System.out.println(fileName+"已创建。");
			}
			//写入20个随机数字
			DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(fileName,true));
			Random random = new Random();
			for(int i=0;i<20;i++)
			{
				int num = random.nextInt();
				//每个整数之间用空格隔开
				dataOutputStream.writeInt(num);
			}
			//关闭DataOutputStream,确保资源被释放
			dataOutputStream.close();
			System.out.println(fileName+"已被写入数据。");
			
			//打开文件并读取内容和打印内容
			DataInputStream dataInputStream = new DataInputStream(new FileInputStream(fileName));
			System.out.println(fileName+"里面的内容为:");
			while(dataInputStream.available()>0)
			{
				int num = dataInputStream.readInt();
				System.out.print(num+" ");
			}
			System.out.println();
			dataInputStream.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		//删除文件,以便能够多次运行
		if (file.delete()) {
            System.out.println(fileName+"已删除。" );
        } else {
            System.out.println(fileName+"无法删除");
        }
	}
}

(3) 对一个学生成绩单进行读写操作。请直接下载blackboard上提供的data.txt文件作为数据源。具体要求如下:

  1. 新建一个可序列化的Student类,其中包括四个成员变量:int型学号、String类型学生名字、String类型学生所在学院、int型成绩(参考data.txt文件)。重写toString方法用于打印Student对象。
  2. 使用BufferedReader从data.txt文件中读取数据,并存放到一个集合对象中,要求按照学生名字的字母顺序升序排列。
  3. 创建一个本地文件output.txt,将集合中的数据序列化到此文件中。(10分)

将output.txt中的数据反序列化,按照降序输出所有成绩在92分以上的学生信息;如果学生成绩相同,则按照学生名字的字母顺序降序输出。文章来源地址https://www.toymoban.com/news/detail-805023.html

package 选实验6;

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

// 新建一个可序列化的Student类
// 实现Serializable 接口,用于可序列化类
// 实现Comparable接口,用于排序
class Student implements Serializable,Comparable<Student>{
	// 保证在对象序列化和反序列化过程中确保版本一致性
	private static final long serialVersionUID = 1L;
	private int studentId;
    private String studentName;
    private String college;
    private int grade;
    
    // 构造方法,用于创建Student对象
    public Student(int studentId, String studentName, String college, int grade) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.college = college;
        this.grade = grade;
    }
    
    // 重写toString方法,用于打印Student对象信息
    @Override
    public String toString() {
    	String res;
        res = "学生{" +
                "学号:" + studentId +
                "; 名字:" + studentName +  
                "; 学院:" + college + 
                "; 成绩:" + grade +
                '}';
        return res;
    }
    
    // 实现Comparable接口的compareTo方法,用于按学生名字升序排列
     @Override
     public int compareTo(Student one) {
        return this.studentName.compareTo(one.studentName);
     }
    
    // 用于(d)问题得到成绩
    public int getGrade() {
    	return grade;
    }
    
    // 用于(d)问题得到学生的姓名
    public String getStudentName() {
    	return studentName;
    }
}
// 主类task3
public class task3 {

	public static void main(String[] args) {
		// 数据文件名
		String fileName = "data.txt";
		
		// 从文件读取数据,并存到集合对象studentList中
		List<Student> students = readStudentToList(fileName);
		
		// 按学生名字升序排列
        Collections.sort(students);
        
        // 打印排序后的学生信息
        // for (Student student : students) {
        //    System.out.println(student);
        //}
        
        String fileName1 = "output.txt";
        //检查文件是否存在,如果不存在则创建
  		File file = new File(fileName1);
  		try {
  			if(!file.exists())
  			{
  				file.createNewFile();
  				System.out.println(fileName1+"已创建。");
  			}
  		}
  		catch (IOException e) {
  			e.printStackTrace();
  		}
  		
  		// 序列化数据到output.txt
  		serialize(students,fileName1);
  		
  		// 反序列化数据
  		List<Student> students1 = deserialize(fileName1);
  		
  		// 输出成绩在92分以上的学生
  		show92up(students1); 		
  		
  	    //删除文件,以便能够多次运行
		if (file.delete()) {
	          System.out.println(fileName1+"已删除。" );
	      } else {
	          System.out.println(fileName1+"无法删除");
	      }
	}
    
	// 从文件中读取数据,返回一个包含Student对象的List
	private static List<Student> readStudentToList(String fileName){
		// 用于返回List的临时变量
		List<Student> tempList = new ArrayList<>();
		
		try(BufferedReader reader = new BufferedReader(new FileReader(fileName))){
			String lineString;
			//逐行读取文件内容
			while((lineString = reader.readLine())!=null) {
				// 拆分获取每个学生的具体信息
				String[] strings = lineString.split(" ");
				// 获取后创建Student对象
				Student temp = new Student(Integer.parseInt(strings[0]),
						strings[1], strings[2], Integer.parseInt(strings[3]));
				// 将创建后的对象加入List中
				tempList.add(temp);
			}
		}
		catch(IOException e) {
			e.printStackTrace();
		}
		// 返回包含Student对象的List
		return tempList;
	}
	
	// 序列化集合中的数据到output.txt中
	private static void serialize(List<Student> temp,String fn) {
		// 在这里是 ObjectOutputStream)会在代码块结束时自动关闭,不需要显式调用 close() 方法来释放资源
		try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fn))){
			oos.writeObject(temp);
		}catch (IOException e) {
            e.printStackTrace();
        }
	}
	
	// 将output.txt中的数据反序列化
	private static List<Student>deserialize(String fn){
		// 用于返回包含Student的List
		List<Student> tempList = new ArrayList<>();		
		// 将反序列化后的对象转换为 List<Student>
		try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fn))) {
			Object object = ois.readObject();
			
			//判断 object 是否是 List 类型
			if(object instanceof List<?>) {
				//将 object 强制转换为 List 类型,可以逐个遍历其中的元素
				List<?> unkown = (List<?>) object;			
				// 遍历List中是否为Student类
				for(Object i : unkown) {
					// 如果是就加入List(强制转换以保证一定为Student类)
					if(i instanceof Student) {
						tempList.add((Student)i);
					}else {
						System.err.println("列表里有不是学生的元素!");
					}
				}
			}else {
				System.err.println("这不是我们想要的列表!");
			}
		}catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        // 返回包含学生的List
		return tempList;
	}
	
	// 按照规定输出成绩在92分以上的学生信息
	private static void show92up(List<Student>temp){
		temp.stream()// 将集合转换为流
		// 过滤操作,保留成绩大于92的学生
		.filter(t->t.getGrade()>92)
		// 排序操作,首先按照学生成绩降序排序,然后按照学生名字的字母顺序升序排序
        // 使用 Comparator.comparing 方法,通过方法引用指定按照哪个属性进行比较
		.sorted(Comparator.comparing(Student::getGrade).reversed().
				thenComparing(Student::getStudentName))
		// 遍历操作,将每个学生信息打印到控制台
		.forEach(System.out::println);
	}
}

到了这里,关于Java程序设计:选实验6 输入输出应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java程序设计实验——实验6

    Spraing※boy 在本次实验中,加入了实验中可能遇到的知识点的总结提示和相关知识点的学习链接,个人觉得这次实验在java中的应用还是非常广泛的,在项目的开发中会经常用到,希望各位友友们能通过这篇博客真正学到一些东西❀❀。 附上:java学习笔记 1、将下列数据:“

    2024年02月03日
    浏览(57)
  • 4、MATLAB程序设计与应用刘卫国(第三版)课后实验四:选择结构程序设计

    目录  一、  二、  三、  四、  五、 求分段函数的值   用 if语句实现,分别输出X=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。 ------------- -------- ------------ ------ 示例代码 - -------------------------- ------------------ ------------- -------- ------------ ------ 运行结果 - -------------------------- --------

    2024年02月05日
    浏览(47)
  • 3、MATLAB程序设计与应用刘卫国(第三版)课后实验三:顺序结构程序设计

    目录 一、  二、  三、  四、  五、  六、 从键盘输入一个4位整数,按如下规则加密后输出。加密规则:每位数字都加上7,然后用和除以10的余数取代该数字;然后将第一位数与第三位数互换,第二位数与第四位数互换。 ------------- -------- ------------ ------ 示例代码 ---------------

    2024年02月03日
    浏览(41)
  • 5、MATLAB程序设计与应用刘卫国(第三版)课后实验五:循环结构程序设计

    目录 一、  二、  三、  四、  五、 已知 求 y的近似值。当n分别取100、1 000、10 000时,结果是多少? 要求 :分别用循环结构和向量运算(使用sum 函数)来实现。 --------------------------------------- 示例代码 --------------------------------------------- --------------------------------------- 运行结果

    2023年04月26日
    浏览(49)
  • Java程序设计-实验五 Java多线程程序设计

    1. 掌握Runnable接口实现多线程的方法 2. 掌握Thread类实现多线程的用法 3. 掌握Java语言中多线程编程的基本方法 要求:编写一个应用程序,除了主线程外,还有三个线程:first、second和third。 first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60); second负责模拟一

    2024年02月03日
    浏览(62)
  • 【Java高级程序设计】注解实验

    @Label注解: person类:  PersonAction接口: PersonInput类,负责提示录入人员的相关属性,提示必须是注解@Label所标注的中文名称。 PersonDisplay,负责显示人员信息,显示时的属性名称必须为注解@Label所标注的中文名称 测试类: 运行结果: @Column注解 Person类: MySqlDAO类: CreateSQL类

    2024年02月07日
    浏览(58)
  • Java程序设计入门教程--控制台输入数据

    控制台输入数据常用类 Scanner类        在 很多情况下,我们需要 Java 程序能够对我们指定的值进行计算,这样的话就需要我们的 Java 程序能够读取我们所输入的值。我们可以使用 Java 自带的 Scanner 类来从控制台获取 输入 。        Scanner 类在包 java.util 里。我们一般在程

    2024年02月07日
    浏览(43)
  • Java面向对象程序设计实验报告(实验五 接口的练习)

    ✨ 作者:命运之光  ✨ 专栏: Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录:源程序代码(带注释) demo5类 Instrument类 Piano类 play类 Student类 Teacher类 Violin类 work类  实验五 接口的练习 实验

    2024年02月06日
    浏览(45)
  • Java面向对象程序设计实验报告(实验二 面向对象基础练习)

     ✨ 作者: 命运之光  ✨  专栏:Java面向对象程序设计实验报告 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录:源程序代码(带注释) 测试类demo2 Address类 Employee类 实验二 面向对象基础练习 实验环境: Eclipse+JDK 实验目的:

    2024年02月06日
    浏览(75)
  • 实验六 Java流式编程与网络程序设计

    Client Server ClientPlus ServerPlus ReceiveThread 本关任务:编写应用程序(SortArray.java),使用字节输入/输出流实现数据的保存和读取。 Java 流功能相关的类都封装在 java.io包中,所以要使用流类,必须导入java.io包。数据流是 Java 进行 I/O 操作的对象,它按照不同的标准可以分为不同的

    2024年02月03日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包