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中查找文本中特定内容后进行修改的主要内容,如果未能解决你的问题,请参考以下文章

如何查找单元格中是不是包含部分文本并引用另一列数据

Java熟食包点系统实战

java中如何在文件中修改某行信息

如何用bat文件查找并修改文本的内容?

XPath / XQuery:在节点中查找文本,但忽略特定后代元素的内容

javaweb项目如何复制,将项目一部分内容修改后,访问地址也改成不一样的,