admin管理员组文章数量:1660142
近期作业要求用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();//关闭读取缓冲区
}
}
版权声明:本文标题:Java实现对文件的增删改查(学生信息的增删改查) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729845361a1215065.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论