1.使用背景
在大学初次学习Java课程设计时,经常会遇到老师要求我们设计管理系统,其中难免会涉及到用户信息的存储等相关内容。
本文以学生信息管理系统为例,讲解我对.txt文件内容修改时经常用到的方法。
2.样例讲解
在.txt文件中每个学生占用3行,每一行分别为学号、姓名、密码。如下所示:
S202101
张三
123456
S202102
李四
123123
S202103
王五
321321
······
S202150
盘五十
64564523
······
S202199
叶九九
4535789
在此次案例中,如要修改学生盘五十的密码,我的做法如下:
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.LinkedList;
import java.util.Scanner;
public class caogao
{
public static void main(String args[]) throws IOException
{
Scanner in = new Scanner(System.in);
System.out.println("请输入你的学号:");
String stuNo = in.nextLine();
/* 选择链表是因为链表在增删改查方面的算法优于顺序表 */
LinkedList<String> list = new LinkedList<String>();
/* 分配读取流 */
File txt = new File("X:\\XXX\\XXX.txt");
FileReader fr = new FileReader(txt);
BufferedReader br = new BufferedReader(fr);
String line;
/* 读取文件内容,存储至链表中 */
while((line = br.readLine())!=null) {
list.add(line);
}
fr.close();
br.close();
/* 循环链表,对学号的查找 */
for (int i = 0; i < list.size(); i+=3) {
/* 当查找到时,对其开始数的第二个内容(即密码)进行修改 */
if(list.get(i).equals(stuNo)) {
System.out.println("请输入您的新密码:");
String newPassword = in.nextLine();
list.set(i+2, newPassword);
/* 分配写入流 */
FileWriter fw = new FileWriter(txt);
BufferedWriter bw = new BufferedWriter(fw);
for (int j = 0; j < list.size(); j++) {
bw.write(list.get(j)+"\n");
bw.flush();
}
fw.close();
bw.close();
in.close();
System.exit(0);
}
}
System.out.println("您输入的学号不存在!");
System.exit(0);
}
}
3.用法总结
这种方法对于初学者来说相对来讲比较好理解,当然也存在着很多缺陷,如一直使用循环遍历这种暴力方法,其次是其实可以在读取时就进行修改,但要使用到设置哨兵等方法提高算法,这儿担心读者走马观花却又想收获点什么,仅是使用到了最基本的方法。