java随机选人,实现对文本文件操作

2023-10-31

理解

全程无报错 IDEA全绿通过 每步都有注解

因为防止 main主代码 太长 将很多方法都封装了

编程小白 有不足的地方希望能指正出来吧

好的处理点

我觉得自己比较好的地方是 将页面方法返回值 设置为集合 这样打印页面的时候 能返回路径名

后面很多需要路径名的地方,直接将打印页面的方法带进去就好了

如果要用的话 使用自己的TXT文件,在打印页面方法,那里添加自己的路径就好啦

能实现 随机抽人 添加姓名 修改姓名 删除姓名 比较简单但是基本功能都有

麻雀虽小五脏俱全就是这样

利用的是java的IO流

集合进行操作

package StudentNameTest;

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

/**
 * @ClassName StudentNameTest.subject
 * @Description TODO
 * @Author CC
 * @DATE 2022/5/17 17:01
 * @Version 1.0
 */

public class subject {
    public static void main(String[] args) throws Exception {
        subject subject = new subject();//创建对象
        subject.method(); //调用方法
    }
    //输入调用方法
    private void method() {
        boolean loopFlag =true; //循环条件 便于终止
        char menu;//判断输入字符
        while (loopFlag){
            mainMenu(); //主界面打印
            //输入数字
            menu = getOutChar();
            switch (menu){
                case '1':
                    //随机选人
                    getStudent();
                    System.out.println();
                    break;
                case '2':
                    //添加学生
                    System.out.println("请输入要添加的学生姓名");
                    addStudent();
                    System.out.println();

                    break;
                case '3':
                    //删除学生
                    System.out.println("请输入要删除的学生姓名");
                    deleteStudent();
                    System.out.println();

                    break;
                case '4':
                    //系统退出
                    System.out.println();
                    System.out.print("确认是否退出(Y/N): ");
                    char isExit = getOut();
                    if (isExit == 'Y'||isExit == 'y'){
                        loopFlag = false;
                    }
                    break;
                case '5':
                    //查看所有学生名单
                    System.out.println();
                    System.out.println("系统所有学生如下: ");
                    getAllStudent();
                    break;

                default:
                    System.out.println("请重新输入(1-4)的数字");
            }
        }
    }

    //主界面
    //返回一个路径
    private String mainMenu(){
        System.out.println("-----------------欢迎进入随机选人系统-------------------");
        System.out.println("1-随机选人");
        System.out.println("2-添加学生");
        System.out.println("3-删除学生");
        System.out.println("4-退出");
        System.out.println("5-查看所有学生");
        System.out.print("文件路径名:");
        String FileAccount = "D:\\Desktop\\StudentName.txt";
        System.out.println(FileAccount);
        return FileAccount;
    }

    //随机抽人
    private void getStudent(){
        ArrayList<String> array = getSetMethod();
        Set<String> set = new HashSet<>(array);

        array = new ArrayList<>(set); //除去集合中重复的元素

        //防止选到换行的空的
        while (true){
            //获取一个随机数
            Random r = new Random();
            int index = r.nextInt(array.size());
            String name = array.get(index); //抽到的名字
            if (name.length() != 0) {
                System.out.println("幸运的同学是:" + name);
                break;
            }

        }
    }

    //删除学生
    //打算全部 取到集合中 删除 再重写入
    private void deleteStudent(){
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(mainMenu())); //缓冲读取字符流
            bufferedWriter = new BufferedWriter(new FileWriter(mainMenu())); //缓冲写入字符流

            ArrayList<String> arrayList = new ArrayList<>(); //创建一个集合

            //写到集合中
            String line;
            while ((line = bufferedReader.readLine())!=null){
                arrayList.add(line);
            }

            String next = new Scanner(System.in).next(); //键盘输入 要删除的姓名
            boolean b = Collections.replaceAll(arrayList, next, "");//替换成空字符
            if (b){
                System.out.println("删除成功");
            }else {
                System.out.println("文件没有此学生");
            }
            //循环遍历集合写入
            for(int i=arrayList.size()-1;i>=0;i--){
                String delete = arrayList.get(i);
                bufferedWriter.write(delete); //写入
                bufferedWriter.newLine(); //换行
                bufferedWriter.flush(); //刷新
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                assert bufferedWriter != null;
                bufferedWriter.close(); //关闭
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    //添加学生
    private void addStudent() {
        BufferedWriter bufferedWriter = null; //缓冲字符流
        try {
            bufferedWriter = new BufferedWriter(new FileWriter(mainMenu(),true));
            String name = new Scanner(System.in).nextLine(); //键盘输入要添加的数据
            bufferedWriter.newLine(); //空行
            bufferedWriter.write(name); //写入
            bufferedWriter.newLine();//空行
            bufferedWriter.flush(); //刷新
            System.out.println("添加学生成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                assert bufferedWriter != null;
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //键盘输入数字
    private char getOutChar(){
        char  c ;
        Scanner scanner = new Scanner(System.in);
        while (true) {
                String s = scanner.next();
                c = s.charAt(0);
            if (c == '1' || c == '2' || c == '3' || c == '4'||c == '5') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        return c;
    }

    //键盘输入字符
    private char getOut() {
        char c;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String s = scanner.nextLine();
            c = s.charAt(0); //String - char
            if (c == 'Y' || c == 'N' || c == 'y' || c == 'n') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        return c;
    }

    //获取文件所有学生名单
    private void getAllStudent(){
        ArrayList<String> array = getSetMethod();
        Set<String> set = new HashSet<>(array);
        for (String s : set) {
            System.out.print("[ ");
            System.out.print(s);
            System.out.println(" ]");
        }
    }
    //将文件入存集合方法
    private ArrayList<String> getSetMethod(){
        BufferedReader br = null;
        ArrayList<String> array = null;
        try {
            br = new BufferedReader(new FileReader(mainMenu()));//存储文件的路径

            array = new ArrayList<>(); //创造集合 写入集合

            String line;
            while ((line = br.readLine())!=null){
                array.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                assert br != null;
                br.close(); //关闭
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return array;
    }
}

报错内容

ErrorCode=0 
SQLState=01S00 
The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

报错原因:

在使用mysql的jdbc驱动最新版(6.0+)时,遇到数据库和系统时区差异引起的问题。

解决方法0-使用6.0以下版本的jdbc:

降版本,并不推荐;

解决方法1-在jdbc url指定默认时区:

还有一种是在jdbc连接的url后面加上serverTimezone=UTC或GMT即可,如果指定使用gmt+8时区,需要写成GMT%2B8,否则可能报解析为空的错误。示例如下:

jdbc.url=jdbc:mysql://localhost:3306/demo?serverTimezone=UTC

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java随机选人,实现对文本文件操作 的相关文章

随机推荐

  • 线性时间内从一个数组中找出第K个最小的元素——编程珠玑

    线性时间内从一个数组中找出第K个最小的元素 编程珠玑 题目 编写程序 在O n 时间内从数组x 0 n 1 中找出第k个最小的元素 算法中可以对x中的元素进行排序 思路 快速排序选择一个pivot对数组进行划分 左边小于pivot 右边大于
  • easyExcel 填写导出转换日期格式

    在使用easyExcel 填写导出的时候 遇到Date类型的字段填写在excel 显示的单元格的格式为自定义格式 原本该单元格格式设置了边框 居中 填写导出后的居然没有加边框 也没有居中 按照源码 写上一个Date转换类 实现Convert
  • 了解Spring的变迁从Spring3到Spring5

    随着互联网技术的发展 Spring也在不断的进化 从最早轻量级的支持J2EE到现在对高并发 多线程异步程序的支持 spring也不断的更新自己走在技术的最前沿 我们先来从Spring3开始看看spring的发展变迁 Spring3 Spri
  • java 控制 区域投屏,Scrcpy投屏原理浅析-设备控制篇

    起初我真的想过自己单独写一套来着 后来发现时间真的不够 所以有了对scrcpy源码的浅析 服务端我就用scrcpy现有的了 客户端scrcpy采用ffmpeg sdl2 0进行了跨平台的播放 我准备用Flutter重构客户端部分 Scrcp
  • SVN客户端安装及使用说明

    SVN客户端安装及使用说明 一 SVN客户端与语言包的安装 1 下载TortoiseSVN 2 安装TortoiseSVN 双击安装包 进入下一步 如图 3 点击Next 进入下一步 如图 4 选择接受 然后点击Next 进入下一步 如图
  • Python中逗号的三种作用

    最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1 逗号在参数传递中的使用 这种情况不多说 没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号 例如def abc a b 或者abc 1 2 2 逗号在类型
  • Python学习笔记(五)—LOOP 循环

    个人认为Python基础学习直到LOOP才算真正开始 循环有While do while 和for 比如while 我们要输出100条 you are my sunshine 可以表达如下 count 0 while count lt 10
  • opencv 打开1080P等高分辨率摄像头时卡顿问题的解决

    参考 blog csdn net lunweiwangxi3 article details 88556911 http blog sina com cn s blog 9b493e7b0102xvn6 html 总结http stacko
  • SRCNN以DIV2K数据集进行训练时,.h5文件、PSNR评价指标、运行结果

    由于是从Word文档直接复制过来 其中格式如果乱码或者不通顺 请评论区告知我 1 对于 h5文件的大小计算 输入图片后 由于大小不同 无法从图片直接计算 但整合后数组有两个 一个arrlabel 一个arrdata 1 其中 arrlabe
  • java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同

    java 对象属性复制 将一个对象的属性值赋值给另一个对象 属性名需要相同 关键代码 import org springframework beans BeanUtils BeanUtils copyProperties a b demo
  • 微信小程序--实现分享功能

    本篇文章的目标是实现分享小程序中的单张页面给其他用户 并且打开分享后的页面拥有返回按钮 最终的效果 1 封装一个分享的组件
  • 文件的名字带有特殊符号下载报错问题

    在这里插入图片描述 其中encodeURI 主要用于整个URI 例如 http www jxbh cn illegal value htm 而encodeURIComponent 主要用于对URI中的某一段 例如前面URI中的illegal
  • 六级(2020/12-2) Text1

    Vegetarians would prefer not to be compelled to eat meat Yet the reverse compulsion 强迫 is hidden in the proposals for a
  • char与wchar_t(TCHAR)之间的相互转换

    char与wchar t TCHAR 之间的相互转换 vc 2005以后 Visual studio 编译器默认的字符集为Unicode VC中很多字符处理默认为宽字符wchar t L Holle 如CString的getBuffer 而
  • 玩转Openwrt(二) — 配合Android手机打造无线音乐播放器

    前一篇文章大概介绍了刷入带ADSL驱动的openwrt以及简单的配置 这次就总结下一个好玩的应用 使用android手机 mpd打造一台无线音乐播放器 所需装备 DB120或者RG100A或者其它BCM6358芯片的路由一台 USB声卡一件
  • 09.语义分割和数据集

    语义分割 PDF part 2 13 pdf d2l ai 视频 46 语义分割和数据集 动手学深度学习v2 哔哩哔哩 bilibili 语义分割 semantic segmentation 问题重点关注于如何将图像分割成属于不同语义类别的
  • 第13章Stata Logistic回归分析

    目录 13 1二元Logistic回归分析 案例延伸 延伸1 设定模型预测概率得具体值 延伸2 使用Probit模型对二分类因变量进行拟合 13 2多元Logistic回归分析 案例延伸 延伸 根据模型预测每个样本视力低下程度的可能性 13
  • Java输入流之BufferReader和Scanner的用法!

    在Java中 我们都知道Java的标准输入串是System in 但是我们却很少在Java中看到谁使用它 这是因为我们平时输入的都是一个字符串或者是一个数字等等 而System in提供的read方法是通过字节来读取数据的 所以对我们来说太
  • react hooks的用法

    一 页面初始化的结构 export const SearchPanel gt 二 声明字段的类型 请求字段类型 const param setParam useState name personId 四 写请求接口的代码 useEffect
  • java随机选人,实现对文本文件操作

    理解 全程无报错 IDEA全绿通过 每步都有注解 因为防止 main主代码 太长 将很多方法都封装了 编程小白 有不足的地方希望能指正出来吧 好的处理点 我觉得自己比较好的地方是 将页面方法返回值 设置为集合 这样打印页面的时候 能返回路径