java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
* 文件的读,写,删除操作
*/
public class FileUtil {
/**
* 读取文件,用于文件回显到页面
* @param url 文件路径 + 文件名
* @return string 属性
*/
public static String readFile(String url) {
BufferedReader br = null;
String file = "";
try {
br = new BufferedReader(new FileReader(url)); // 读取文件
String line = null;
while((line = br.readLine()) != null) { // 按行读取
if(StringUtils.isNotBlank(line)) {
file += line +";";
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
/**
* 删除文件
* @param url 文件路径 + 文件名
* @param content 删除的内容用 ; 隔开
*/
public static void removeFile(String url, String content) {
String s = readFile(url); // 读取文件
String[] split = content.split(";"); // 删除的内容
Map map = new HashMap<>();
for(String sp: split) {
String[] split1 = sp.split("=");
map.put(split1[0], split1[1]);
}
String[] string = s.split(";"); // 原文件内容
String write = ""; // 写入文件的新数组
for(String str: string) {
if(str.contains("#")) { // 过滤注释
write += str +";";
}else {
String[] split1 = str.split("=");
String s1 = map.get(split1[0]);
String untrue = map.get("untrue"); // 属性值[mysqld] || [client]
if(StringUtils.isNotBlank(untrue)) {
if(untrue.equals(split1[split1.length - 1])) {
map.keySet().removeIf(key -> key.startsWith("untrue")); // 删除已经赋值元素
}else {
if(StringUtils.isBlank(s1)) { // map没有这个属性,不删除
write += str +";";
}else {
map.keySet().removeIf(key -> key.startsWith(split1[0])); // 删除已经赋值元素
}
}
}else {
if(StringUtils.isBlank(s1)) { // map没有这个属性,不删除
write += str +";";
}else {
map.keySet().removeIf(key -> key.startsWith(split1[0])); // 删除已经赋值元素
}
}
}
}
String property = System.getProperty("line.separator"); // 针对于不同性质的操作系统的换行
BufferedWriter o = null; // 写入删除后内容
try {
o = new BufferedWriter(new FileWriter(url));
String[] split1 = write.split(";");
for(String spl: split1) { // 更新文件
o.write(spl + property);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(o != null) {
try {
o.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 更新文件
* @param url 文件路径,用 / 结尾
* @param file 文件名
* @param content 修改追加的文件内容,或者修改的文件内容,用 ; 分割
*/
public static void updateFile(String url, String file, String content) {
BufferedReader br = null;
BufferedWriter out = null;
BufferedWriter o = null;
String property = System.getProperty("line.separator"); // 针对于不同性质的操作系统的换行
try {
br = new BufferedReader(new FileReader(url + file)); // 读取文件
File f = new File(url +"copy_"+ file); // 备份文件
if(!f.exists()) {
f.createNewFile(); // 创建文件
}
out = new BufferedWriter(new FileWriter(url +"copy_"+ file)); // 备份文件写入
String[] split = content.split(";"); // 处理需要写入的新数据
Map map = new HashMap<>(); // 保存新数据
for(String s: split) {
String[] strings = s.split("=");
map.put(strings[0], strings[1]);
}
String line = null;
String write = "";
while ((line = br.readLine()) != null) { // 按行读取
if(StringUtils.isNotBlank(line)) {
out.write(line + property); // 写入备份文件,换行写入
if(line.contains("#")) { // # 开头是注释 [] 是标注,原样保存
write += line + ";";
}else { // 根据输入的内容,原本存在的属性,修改;原本没有的属性,追加
String[] strings = line.split("="); // 前面是属性,后面是数值,原值
String s = map.get(strings[0]); // 根据key获取新赋值数值
String untrue = map.get("untrue"); // 属性值[mysqld] || [client]
if(StringUtils.isNotBlank(untrue)) {
if(untrue.equals(strings[strings.length - 1])) { // 属性值存在,不操作
write += line +";";
map.keySet().removeIf(key -> key.startsWith("untrue")); // 删除已经赋值元素
}else {
if(StringUtils.isNotBlank(s)) { // 更改的属性
write += strings[0] +"="+ s +";";
map.keySet().removeIf(key -> key.startsWith(strings[0])); // 删除已经赋值元素
}else { // 新增没有此属性,原值保存
write += line +";";
}
}
}else {
if(StringUtils.isNotBlank(s)) { // 更改的属性
write += strings[0] +"="+ s +";";
map.keySet().removeIf(key -> key.startsWith(strings[0])); // 删除已经赋值元素
}else { // 新增没有此属性,原值保存
write += line +";";
}
}
}
}
}
for(Map.Entry m : map.entrySet()) { // 新增的属性
if(m.getKey().equals("untrue")) { // 用于只有一个数值,没有key的属性
write += m.getValue() +";";
}else {
write += m.getKey() +"="+ m.getValue() +";";
}
}
o = new BufferedWriter(new FileWriter(url + file)); // 原文件追加或修改属性
String[] split1 = write.split(";");
for(String s: split1) { // 更新文件
o.write(s + property);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(o != null) {
try {
o.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
调用方式:
// 读取文件内容
@GetMapping("/read")
public void read() {
String file = FileUtil.readFile("/Users/Desktop/my.cnf");
String[] split = file.split(";");
for(String s: split) {
if(!s.contains("#")) { // 去掉注释
System.out.println("读取到的文件:"+ s);
}
}
}
// 修改文件内容
@GetMapping("/update")
public void update() {
String s = "max_allowed_packet=521M;untrue=[client];";
FileUtil.updateFile("/Users/Desktop/", "my.cnf", s);
}
// 删除文件内容
@GetMapping("/remove")
public void remove() {
String s = "max_allowed_packet=521M;untrue=[client];";
FileUtil.removeFile("/Users/Desktop/my.cnf", s);
}
* 不适用于文件特别大的场景
java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作相关推荐
- java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...
本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...
- Java抓取起点小说输出到本地文件夹和数据库
Java抓取起点小说输出到本地文件夹和数据库 目录 项目结构 所需插件 项目代码 输出结果 目录 项目结构 第一次写网络爬虫,参考了别人的,也自己理解了用法 所需插件 因为使用了mevan,直接上po ...
- 文件包含原理及本地文件包含漏洞演示(本地文件,远程包含文件的测试)
一.文件包含漏洞概述 1.定义:文件包含漏洞是一种最常见的漏洞类型,它会影响依赖于脚本运行时的web应用程序.当应用程序使用攻击者控制的变量构建可执行代码的路径时,文件包含漏洞会导致攻击者任意控制运行 ...
- java文件中查找字符串_Java 在本地文件中查找固定字符串
适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站
Java提供了许多方法调用来检查和更改文件的权限,例如可以将只读文件更改为具有写入权限.当用户想要限制文件允许的操作时,需要更改文件权限.例如,文件权限可以从写入更改为只读,因为用户不再想要编辑文件. ...
- java如何解析word大纲_java解析word文件
POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件. POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便. ...
- java ftp 上传文件 无效_java实现FTP文件上传出现的问题
昨天用JAVA写了一个实现FTP文件上传功能的类(是通过sun.net.ftp包实现的,此包为SUN的私有类包,所以官方没有提供相关API文档),然后进行了简单的测试. 具体类代码如下(此类的部分方法 ...
- java解压中文乱码_java解压文件中文乱码怎么处理
上次利用java自动的java.util.zip.ZipEntry和??java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现 ...
最新文章
- K项目小记 - 项目已开工整整四周!
- 五丶阿东安装部署教程+青龙对接阿东及傻妞实现自动登录
- matlab 三维饼图,重新学习MATLAB——作图技法及3D可视化
- 【读书笔记】Android的Ashmem机制学习
- java时间格式转js_使用jquery或java脚本将日期时间转换为rfc3339格式
- spark 应用程序性能优化经验
- 数据算法之插入排序(insertSort)的Java实现
- Win11 BitLocker驱动器加密怎么使用
- linux建ftp用户限制访问,Linux下建ftp用户并限制用户访问路径
- 鸿蒙系统微信红包,鸿蒙道红包版
- Hi3520d 网卡驱动源码分析
- 【高数】数学符号及读法大全and数学运算符号及含义
- 在深度学习时代用 HowNet 搞事情 刘知远 01-09
- 12864 C语言程序 带详细注解
- houseprice_analysis_广州房子租售比分析(上)
- java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件
- 计算机辅助翻译专业实训报告,计算机辅助翻译实训报告格式.docx
- bowen -猜拳游戏
- SparkMllib模型选择与优化-网格搜索和交叉验证
- 一元多项式的相加和相减操作(链表)