利用IO流对文件的修改,以BufferedReader&BufferedWriter字符流为例

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.用法总结

这种方法对于初学者来说相对来讲比较好理解,当然也存在着很多缺陷,如一直使用循环遍历这种暴力方法,其次是其实可以在读取时就进行修改,但要使用到设置哨兵等方法提高算法,这儿担心读者走马观花却又想收获点什么,仅是使用到了最基本的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值