一、问题的产生
在最近使用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基础之查找文本特定内容后进行修改的文章就介绍到这了,更多相关java查找文本内容进行修改内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_43950569/article/details/115868793