Java如何向指定文件操作一段内容(增加,删除均可使用本方法)

 更新时间:2023年12月16日 10:12:21   作者:木昜楊的书  
这篇文章主要介绍了Java如何向指定文件操作一段内容(增加,删除均可使用本方法),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java向指定文件指定内容插入需要替换的内容

之前查看了许多的博客发现很少有人提及段落更换的方法

刚好因为工作需要便写了这个小功能

可以替换掉自己想要替换的一个片段而不是某一行或者在末尾添加内容。

package com.yk.replace;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * RandomAccessFile向指定文件,指定位置插入内容
 * 1.先使用File的createTempFile创建一个临时文件
 * 2.将插入以后的文件内容(末尾节点开始后的内容)保存到临时文件中
 * 3.程序重新定位到插入点,将要插入的内容保存到节点后
 * 4.这样就相当于完成了文件的拼接
 * 
 * @author yangkai
 */
public class InsertContent {
	public static void insert(String fileName, String startContext, String endContext, String insertContent)
			throws IOException {

		RandomAccessFile raf = null;
		// 创建临时文件保存插入点后数据
		File tmp = File.createTempFile("tmp", null);
		FileOutputStream tmpout = null;
		FileInputStream tmpin = null;

		// 定位节点使用,readline方法不能识别\r\n,因此需要自己添加进去,最开始因为这个检索节点始终不准耽误了很长时间
		StringBuffer buffer = new StringBuffer();
		BufferedReader bf = new BufferedReader(new FileReader(fileName));
		String s = null;
		while ((s = bf.readLine()) != null) {// 使用readLine方法,一次读一行
			buffer.append(s + "\r\n");
		}

		String xml = buffer.toString();

		long posStatr = xml.indexOf(startContext) + startContext.length() + 2;
		long posEnd = xml.indexOf(endContext);

		tmp.deleteOnExit();// jvm退出的时候删除临时文件
		try {
			raf = new RandomAccessFile(fileName, "rw");
			tmpout = new FileOutputStream(tmp);
			tmpin = new FileInputStream(tmp);
			raf.seek(posEnd);
			// 将插入点后的内容读入临时文件中保存
			byte[] bbuf = new byte[64];
			int hasRead = 0;
			while ((hasRead = raf.read(bbuf)) > 0) {
				tmpout.write(bbuf, 0, hasRead);
			}
			// 把文件记录指针定位到pos
			raf.seek(posStatr);
			raf.write(insertContent.getBytes());
			while ((hasRead = tmpin.read(bbuf)) > 0) {
				raf.write(bbuf, 0, hasRead);
			}

		} finally {
			raf.close();
		}

	}

	public static void main(String[] args) throws IOException {
		insert("filePath","posStart","posEnd", "replaceContext\r\n");
	}

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中joda日期格式化工具的使用示例

    Java中joda日期格式化工具的使用示例

    这篇文章主要介绍了Java中joda日期格式化工具的使用示例,帮助大家更好的利用Java处理时间,感兴趣的朋友可以了解下
    2021-01-01
  • SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介绍了SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Spring解决依赖版本不一致报错问题

    Spring解决依赖版本不一致报错问题

    许多同学经常会遇到依赖版本不一致导致代码报错,所以这篇文章就给大家详细介绍一下Spring解决依赖版本不一致报错问题,需要的朋友跟着小编一起来看看吧
    2023-07-07
  • SpringBoot事务失效的八大原因及解决方案

    SpringBoot事务失效的八大原因及解决方案

    在 Spring Boot 项目开发中,声明式事务管理通过 @Transactional 注解提供了极大的便利,但许多开发者都曾遇到过事务不生效的困扰,本文将详细分析导致 Spring Boot 事务失效的八大常见情况,并提供相应的解决方案,需要的朋友可以参考下
    2025-09-09
  • Java多线程 原子性操作类的使用

    Java多线程 原子性操作类的使用

    这篇文章主要介绍了Java多线程 原子性操作类的使用,在java5以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,本文总结一下Atomic系列的类的使用方法,下面一起进入文章了解详细内容
    2021-10-10
  • Springboot 引入 Redis 并配置序列化并封装RedisTemplate 

    Springboot 引入 Redis 并配置序列化并封装RedisTemplate 

    这篇文章主要介绍了Springboot 引入 Redis 并配置序列化并封装RedisTemplate。文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 基于SpringBoot的Dubbo泛化调用的实现代码

    基于SpringBoot的Dubbo泛化调用的实现代码

    这篇文章主要介绍了基于SpringBoot的Dubbo泛化调用的实现,从泛化调用实现的过程来看,我们可以对自己提供所有服务进行测试,不需要引入调用的接口,减少代码的侵入,需要的朋友可以参考下
    2022-04-04
  • Java获取视频时长、大小的示例

    Java获取视频时长、大小的示例

    这篇文章主要介绍了Java获取视频时长、大小的示例,帮助大家利用Java处理视频,完成需求,感兴趣的朋友可以了解下
    2020-11-11
  • Spring Data Envers支持有条件变动纪录的保存和查询的方法

    Spring Data Envers支持有条件变动纪录的保存和查询的方法

    通过spring-data-envers可以很容易的实现数据变动纪录的保存和查询,本文介绍支持有条件变动纪录的保存和查询的方法,通过spring-data-envers很容易的实现变动纪录的保存和查询,只需要增加几个注解就可以,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 一篇文章弄懂Spring MVC的参数绑定

    一篇文章弄懂Spring MVC的参数绑定

    这篇文章主要给大家介绍了关于如何通过一篇文章弄懂Spring MVC的参数绑定,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02

最新评论