Java中查找文本中特定内容后进行修改
Posted 没谱的曲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中查找文本中特定内容后进行修改相关的知识,希望对你有一定的参考价值。
问题的产生
基于I/O流编写的图书馆管理系统
在最近使用I/O流写图书馆管理系统中有修改图书信息的部分,以及借书和还书等多个部分内容都需要对文本中的特定位置的内容进行精确查找并修改,在查阅资料和同学讨论后最终将该问题解决了。
问题解决
下面通过修改密码为例,演示一下该方法的实现:
具体代码:
String filePath = "用户信息.txt";
User modifyFile = new User();
System.out.println("请输入原密码:");
String oldString = sc.next();
//如果输入的原密码不正确,无法进行修改,如果正确,才能进行修改
if (oldString.equals(userinf[1]))
System.out.println("请输入新密码:");
String newString = sc.next();
boolean result = modifyFile.writeFile(filePath, modifyFile.readFileContent(userinf, filePath, userinf[1], newString));// 修改文件中密码
// 如果修改结果为true,进行修改成功提示,否则提示修改失败
if (result == true)
System.out.println("修改成功,请重新登录!");
return;
else
System.out.println("修改错误,请检查后重新修改!");
else
System.out.println("输入错误,请检查后重新进行修改!");
其中userinf为其他类中传入的参数,主要作用是为了进行判断密码是否正确,具体代码可以查看基于I/O流编写的图书馆管理系统
我们注意到上述代码中有一行为:
modifyFile.writeFile(filePath, modifyFile.readFileContent(userinf, filePath, userinf[1], newString));// 修改文件中密码
该行代码调用的两个方法才是解决本文内容的关键方法
具体实现如下:
// 读文件
public String readFileContent(String[] userinf, String filePath, String oldString, String newString)
Scanner sc = new Scanner(System.in);
BufferedReader br = null;
String line = null;
StringBuffer bufAll = new StringBuffer();// 保存修改过后的所有内容
try
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
while ((line = br.readLine()) != null)
StringBuffer buf = new StringBuffer();
// 修改内容核心代码
String[] userinf2 = line.split(",");
if (userinf2[0].equals(userinf[0])) //判断条件根据自己的要求修改
buf.append(line);
int indexOf = line.indexOf(oldString);
buf.replace(indexOf, indexOf + oldString.length(), newString);// 修改内容
buf.append(System.getProperty("line.separator"));// 添加换行
bufAll.append(buf);
else
buf.append(line);
buf.append(System.getProperty("line.separator"));
bufAll.append(buf);
catch (Exception e)
e.printStackTrace();
finally
if (br != null)
try
br.close();
catch (Exception e)
br = null;
return bufAll.toString();
// 写文件
public boolean writeFile(String filePath, String content)
BufferedWriter bw = null;
try
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
bw.write(content);
bw.flush();
catch (Exception e)
e.printStackTrace();
return false;
finally
if (bw != null)
try
bw.close();
catch (IOException e)
bw = null;
return true;
通过上述方法可以找到文本中对应行中当前信息所对应的位置,然后将newString替换为oldString
如下所示:
以下为当前用户信息:
在操作中就行了修改密码,此时我们再查看文件中张三所对应的密码
此时密码已经被修改为1234
以上是关于Java中查找文本中特定内容后进行修改的主要内容,如果未能解决你的问题,请参考以下文章