JavaIO编程实例——数据排序深入处理

将排序处理的内容进行扩展,可以将全部输入的信息保存在文件中,还可以添加信息,并且可以现实全部数据。

如果此时进行内容的保存,那么首先一定要确认好所有输入数据的保存位置,所有的数据之间如果要想沿用之前的设计结构,则数据文件里面的保存应该做到格式统一,即:“姓名:成绩|”的形式进行存储,而在进行数据添加的时候可以添加两类数据:“单独的内容”、“一组内容”。暂时不考虑数据过大的问题;
1、设置一个文件的处理累,该类之中只是提供又数据的追加操作

package demo.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;

public class FileUtil {
	public static String load(File file) {
		Scanner scan = null;
		try {
			scan = new Scanner(file);//文件加载
			if(scan.hasNext()) {
				String str = scan.next();//获取数据
				return str;
			}
			return null;
		}catch(Exception e) {
			return null;
		}finally {
			if(scan != null) {
				scan.close();
			}
		}
	}
	public static boolean append(File file,String content) {
		PrintStream out = null;
		try {
			out = new PrintStream(new FileOutputStream(file,true));
			out.print(content);//内容添加
			return true;
		}catch(Exception e) {
			return false;
		}finally {
			if(out != null) {
				out.close();
			}
		}
	}
}

2、扩充IStudentService操作方法

package demo.service;
import demo.vo.Student;
public interface IStudentService {
	public void append(String str);//追加数据并且保存到文件。
	public Student[] getData();//获取排序数据
}

3、修改StudentServiceImpl中的功能

package demo.service.impl;

import java.io.File;
import java.util.Arrays;

import demo.service.IStudentService;
import demo.util.FileUtil;
import demo.vo.Student;
public class StudentServiceImpl implements IStudentService {
	private static final File SAVE_FILE = new File("D:" + File.separator + "Student.txt");
	private String content;
	private Student[] students;
	public StudentServiceImpl() {
		this.content = FileUtil.load(SAVE_FILE);//读取已有的数据文件内容
		this.handle();//进行数据处理
	}
	@Override
	public void append(String str) {
		if(str.startsWith("|")) {//最前面以“|”开头
			str = str.substring(1);//截取后面部分
		}
		if(!str.endsWith("|")) {//数据合理,可以直接追加
			str = str + "|";//与后面的数据进行分割		
		}
		FileUtil.append(SAVE_FILE, str);//数据追加操作
	}
	private void handle() {//进行字符串拆分
		String result[] = this.content.split("\\|");//拆分数据
		this.students = new Student[result.length];
		for (int x = 0 ; x < this.students.length; x ++) {
			String temp[] = result[x].split(":");
			this.students[x] = new Student(temp[0],Double.parseDouble(temp[1]));
		}
	}
	@Override
	public Student[] getData() {
		Arrays.sort(this.students);
		return this.students;
	}
}

4、工厂类不再需要输入数据

package demo.factory;

import demo.InputUtil;
import demo.service.IStudentService;
import demo.service.impl.StudentServiceImpl;

public class Factory {
	private Factory() {}
	public static IStudentService getInstance() {
		return new StudentServiceImpl();
	}
}

5、定义一个 菜单

package demo;


import java.util.Arrays;

import demo.factory.Factory;
import demo.service.IStudentService;

public class Menu {
	public Menu() {
		this.choose();
	}
	public void choose() {
		this.show();
		String choose = InputUtil.getString("请选择:");
		switch(choose) {
		case"1":{//接收输入数据
			String str = InputUtil.getString("请输入要追加的数据:");
			IStudentService studentService = Factory.getInstance();
			studentService.append(str);//追加数据,省略判断输入格式
			choose();//重复出现
		}
		case"2":{//显示数据
			IStudentService studentService = Factory.getInstance();
			System.out.println(Arrays.toString(studentService.getData()));
			choose();//重复出现
		}
		case"0":{
			System.out.println("下次再见,拜拜!");
			System.exit(1);
		}
		default:{
			System.out.println("您输入了非法的选项,无法进行处理,请稍后再次执行程序!");
			choose();
		}
		}
	}
	public void show() {
		System.out.println("【1】追加字符串数据\n");
		System.out.println("【2】显示所有的学生串数据\n");
		System.out.println("【0】结束程序执行。");
		System.out.println("\n\n");
	}
}

6、编写测试类

package demo;
public class IOCaseDemo {
	public static void main(String[] args) {
		 new Menu();
	}
}

参考资料:
https://edu.aliyun.com/lesson_1012_9022#_9022

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值