java中的接口是类吗
273
2022-10-28
Java基础之查找文本特定内容后进行修改
一、问题的产生
基于I/O流编写的http://图书馆管理系统
在最近使用I/O流写图书馆管理系统中有修改图书信息的部分,以及借书和还书等多个部分内容都需要对文本中的特定位置的内容进行精确查找并修改,在查阅资料和同学讨论后最终将该问题解决了。
二、问题的解决
下面通过修改密码为例,演示一下该方法的实现:
具体代码:
String filePathttp://h = "用户信息.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
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~