Java实现对文件的增删改查(学生信息的增删改查)

近期作业要求用java 实现对学生信息的增删改查,数据通过文件保存,
开发工具 VScode 想要用数据库奈何电脑闹脾气JAVA死活链接不上数据库所以只能退而求其次使用文件操作。但是复杂度上升了不少。经过努力也是实现了 实现如下
在这里插入图片描述

有一点小问题就是对文件修改时输入文字会出现乱码,VScode配置问题,运行时注意编码格式应该就解决,还有就是输入流提醒问题。提醒input 输入流未关闭。不影响程序运行。
下面是代码

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

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        boolean flag1 = true;
        Scanner input;
        int start_stop = 1;
        int mode;
        MyFile file = new MyFile();
        input = new Scanner(System.in);
        while (flag1) {
            System.out.println("输入你想进行的操作:查询(1).修改(2).插入(3)删除(4)");
            mode = input.nextInt();
            switch (mode) {
                case 1:
                    file.read();
                    break;
                case 2:
                    file.alter();
                    break;
                case 3:
                    file.insert();
                    break;
                case 4:
                    file.drop();
                    break;
            }
            System.out.println("是否退出y(1)/n(0)");
            // input = new Scanner(System.in);
            start_stop = input.nextInt();
            if (start_stop == 0) {
                // input.close();
                flag1 = false;
            }
        }
    }
}

class MyFile {
    FileReader filereader;//文件读取
    BufferedReader bfreader;//读取缓冲
    StringBuffer streader;//字符缓冲区
    FileWriter filewriter;//文件读取流
    BufferedWriter bfwriter;//读取缓冲

    public void read() throws Exception {
        filereader = new FileReader("D:\\Study\\simlate\\base.txt");
        bfreader = new BufferedReader(filereader);
        String s;
        streader = new StringBuffer();
        System.out.println("Sno" + "  " + "Sname" + "  " + "Sex" + "  " + "Sep" + "  " + "Sday" + "  ");
        while ((s = bfreader.readLine()) != null) {//只要读取不完成循环不退出
            System.out.println(s);
        }
        bfreader.close();
    }

    public void alter() throws Exception {
        String swapindex, swap;
        int index, swit = 1, i = 0;
        boolean flag = true;//设置标志位,判断相同的操作是否继续执行(退出循环体的标志)
        String s;
        streader = new StringBuffer();
        filereader = new FileReader("D:\\Study\\simlate\\base.txt");
        bfreader = new BufferedReader(filereader);
        System.out.println("Sno" + "  " + "Sname" + "  " + "Sex" + "  " + "Sep" + "  " + "Sday" + "  ");
        while ((s = bfreader.readLine()) != null) {
            s = s + " ";
            streader.append(s);
            System.out.println(s);
        }
        String[] words = streader.toString().split("\\s+");
        Scanner input = new Scanner(System.in);
        while (flag) {
            System.out.println("输入相关信息如:1 Sno 202084230934修改第一行的sno修改为,,,,");
            index = input.nextInt();
            swapindex = input.next();
            swap = input.next();
            switch (swapindex) {//由于每个人的学生信息数量是一致的,所以可以通过计算找出你要查找的值
                case "Sno":
                    words[(index - 1) * 5] = swap;
                    break;
                case "Sname":
                    words[(index - 1) * 5 + 1] = swap;
                    break;
                case "Sex":
                    words[(index - 1) * 5 + 2] = swap;
                    break;
                case "Sep":
                    words[(index - 1) * 5 + 3] = swap;
                    break;
                case "Sday":
                    words[(index - 1) * 5 + 4] = swap;
                    break;
            }
            System.out.println("是否继续修改yes->(1),no->(0)");
            swit = input.nextInt();
            if (swit == 0)
                flag = false;
        }
        bfreader.close();
        // input.close();
        filewriter = new FileWriter("D:\\Study\\simlate\\base.txt");
        bfwriter = new BufferedWriter(filewriter);
        System.out.println("修改后的表");
        System.out.println("Sno" + "  " + "Sname" + "  " + "Sex" + "  " + "Sep" + "  " + "Sday" + "  ");
        for (String a : words) {
            a = a + " ";
            i = i + 1;
            bfwriter.write(a);
            System.out.print(a);
            if (i % 5 == 0) {//五个数据一组
                bfwriter.newLine();
                System.out.println();
            }
        }
        bfwriter.close();
    }

    public void drop() throws Exception {
        String[] temp;
        String s;
        int i = 0, drop_value, begin, end;
        Scanner input;
        boolean flag4 = true;
        int star_stop = 1;
        streader = new StringBuffer();
        filereader = new FileReader("D:\\Study\\simlate\\base.txt");
        bfreader = new BufferedReader(filereader);
        System.out.println("Sno" + "  " + "Sname" + " " + "Sex" + " " + "Sep" + " " + "Sday" + " ");
        while ((s = bfreader.readLine()) != null) {
            System.out.println(s);
            s = s + " ";
            streader.append(s);
        }
        temp = streader.toString().split("\\s+");
        bfreader.close();
        filewriter = new FileWriter("D:\\Study\\simlate\\base.txt");
        bfwriter = new BufferedWriter(filewriter);
        streader = new StringBuffer();
        input = new Scanner(System.in);
        while (flag4) {
            System.out.println("输入你想删除的信息 例如:3,删除第三行数据");
            drop_value = input.nextInt();
            begin = (drop_value - 1) * 5 + 1;
            end = drop_value * 5;
            for (String a : temp) {
                a = a + " ";
                i = i + 1;
                if (i < begin || end < i) {
                    streader.append(a);
                    System.out.print(a);
                    if (i % 5 == 0) {
                        System.out.println();
                    }
                }
            }
            temp = streader.toString().split("\\s+");
            streader.setLength(0);//刷新字符缓冲区方便下次进行数据的删除
            System.out.println("是否继续删除yes(1),no(0)");
            star_stop = input.nextInt();
            if (star_stop == 0) {
                flag4 = false;
            }
            i = 0;
        }
        i = 0;
        System.out.println("删除后的信息");
        System.out.println("Sno" + " " + "Sname" + " " + "Sex" + " " + "Sep" + " " + "Sday" + " ");
        for (String a : temp) {
            a = a + " ";
            i = i + 1;
            bfwriter.write(a);
            System.out.print(a);
            if (i % 5 == 0) {
                bfwriter.newLine();
                System.out.println();
            }

        }
        bfwriter.close();
    }

    public void insert() throws Exception {
        String s;
        int i = 0;
        Scanner input;
        String insert_value;//存储你想要插入的信息
        String[] words;
        boolean flag3 = true;
        int sta_sto = 1;
        streader = new StringBuffer();
        filereader = new FileReader("D:\\Study\\simlate\\base.txt");
        bfreader = new BufferedReader(filereader);
        while ((s = bfreader.readLine()) != null) {
            s = s + " ";
            streader.append(s);
        }
        filereader.close();
        bfreader.close();
        input = new Scanner(System.in);
        while (flag3) {
            System.out.println("输入相关信息如:202084230934 张三 男 网络空间安全 2001-03-03");
            insert_value = input.nextLine();//读取一整行信息
            insert_value = " " + insert_value;
            streader.append(insert_value);
            System.out.println("是否继续插入yes(1)/no(2)");
            sta_sto = input.nextInt();
            if (sta_sto == 0) {
                flag3 = false;
            }
        }
        // input.close();
        System.out.println("插入结果");
        words = streader.toString().split("\\s+");
        System.out.println("Sno" + "  " + "Sname" + "  " + "Sex" + "  " + "Sep" + "  " + "Sday" + "  ");
        filewriter = new FileWriter("D:\\Study\\simlate\\base.txt");
        bfwriter = new BufferedWriter(filewriter);
        for (String a : words) {
            a = a + " ";
            i = i + 1;
            bfwriter.write(a);
            System.out.print(a);
            if (i % 5 == 0) {
                bfwriter.newLine();
                System.out.println();
            }
        }
        bfwriter.close();//关闭读取缓冲区
    }
}

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值