Java如何向指定文件操作一段內(nèi)容(增加,刪除均可使用本方法)
Java向指定文件指定內(nèi)容插入需要替換的內(nèi)容
之前查看了許多的博客發(fā)現(xiàn)很少有人提及段落更換的方法
剛好因?yàn)楣ぷ餍枰銓懥诉@個(gè)小功能
可以替換掉自己想要替換的一個(gè)片段而不是某一行或者在末尾添加內(nèi)容。
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向指定文件,指定位置插入內(nèi)容
* 1.先使用File的createTempFile創(chuàng)建一個(gè)臨時(shí)文件
* 2.將插入以后的文件內(nèi)容(末尾節(jié)點(diǎn)開始后的內(nèi)容)保存到臨時(shí)文件中
* 3.程序重新定位到插入點(diǎn),將要插入的內(nèi)容保存到節(jié)點(diǎn)后
* 4.這樣就相當(dāng)于完成了文件的拼接
*
* @author yangkai
*/
public class InsertContent {
public static void insert(String fileName, String startContext, String endContext, String insertContent)
throws IOException {
RandomAccessFile raf = null;
// 創(chuàng)建臨時(shí)文件保存插入點(diǎn)后數(shù)據(jù)
File tmp = File.createTempFile("tmp", null);
FileOutputStream tmpout = null;
FileInputStream tmpin = null;
// 定位節(jié)點(diǎn)使用,readline方法不能識(shí)別\r\n,因此需要自己添加進(jìn)去,最開始因?yàn)檫@個(gè)檢索節(jié)點(diǎn)始終不準(zhǔn)耽誤了很長(zhǎng)時(shí)間
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退出的時(shí)候刪除臨時(shí)文件
try {
raf = new RandomAccessFile(fileName, "rw");
tmpout = new FileOutputStream(tmp);
tmpin = new FileInputStream(tmp);
raf.seek(posEnd);
// 將插入點(diǎn)后的內(nèi)容讀入臨時(shí)文件中保存
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");
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA簡(jiǎn)單實(shí)現(xiàn)登錄注冊(cè)頁面
這篇文章主要介紹了IDEA簡(jiǎn)單實(shí)現(xiàn)登錄注冊(cè)頁面,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動(dòng)態(tài)索引
這篇文章主要介紹了SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動(dòng)態(tài)索引,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09
Springboot?上傳文件或頭像(MultipartFile、transferTo)
本文主要介紹了Springboot?上傳文件或頭像(MultipartFile、transferTo),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Go反射底層原理及數(shù)據(jù)結(jié)構(gòu)解析
這篇文章主要介紹了Go反射底層原理及數(shù)據(jù)結(jié)構(gòu)解析,反射的實(shí)現(xiàn)和interface的組成很相似,都是由“類型”和“數(shù)據(jù)值”構(gòu)成,下面小編分享更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-06-06
Java JSON轉(zhuǎn)成List結(jié)構(gòu)數(shù)據(jù)
這篇文章主要介紹了Java JSON轉(zhuǎn)成List結(jié)構(gòu)數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
java中ConcurrentHashMap的讀操作為什么不需要加鎖
ConcurrentHashMap完全允許多個(gè)讀操作并發(fā)進(jìn)行,讀操作并不需要加鎖。所以下面這篇文章主要給大家介紹了關(guān)于java中ConcurrentHashMap的讀操作為什么不需要加鎖的相關(guān)資料,需要的朋友可以參考下2018-10-10

