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对本地文件内容读取、修改、删除的操作相关推荐

  1. java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...

    本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...

  2. Java抓取起点小说输出到本地文件夹和数据库

    Java抓取起点小说输出到本地文件夹和数据库 目录 项目结构 所需插件 项目代码 输出结果 目录 项目结构 第一次写网络爬虫,参考了别人的,也自己理解了用法 所需插件 因为使用了mevan,直接上po ...

  3. 文件包含原理及本地文件包含漏洞演示(本地文件,远程包含文件的测试)

    一.文件包含漏洞概述 1.定义:文件包含漏洞是一种最常见的漏洞类型,它会影响依赖于脚本运行时的web应用程序.当应用程序使用攻击者控制的变量构建可执行代码的路径时,文件包含漏洞会导致攻击者任意控制运行 ...

  4. java文件中查找字符串_Java 在本地文件中查找固定字符串

    适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...

  5. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  6. java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站

    Java提供了许多方法调用来检查和更改文件的权限,例如可以将只读文件更改为具有写入权限.当用户想要限制文件允许的操作时,需要更改文件权限.例如,文件权限可以从写入更改为只读,因为用户不再想要编辑文件. ...

  7. java如何解析word大纲_java解析word文件

    POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件. POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便. ...

  8. java ftp 上传文件 无效_java实现FTP文件上传出现的问题

    昨天用JAVA写了一个实现FTP文件上传功能的类(是通过sun.net.ftp包实现的,此包为SUN的私有类包,所以官方没有提供相关API文档),然后进行了简单的测试. 具体类代码如下(此类的部分方法 ...

  9. java解压中文乱码_java解压文件中文乱码怎么处理

    上次利用java自动的java.util.zip.ZipEntry和??java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现 ...

最新文章

  1. K项目小记 - 项目已开工整整四周!
  2. 五丶阿东安装部署教程+青龙对接阿东及傻妞实现自动登录
  3. matlab 三维饼图,重新学习MATLAB——作图技法及3D可视化
  4. 【读书笔记】Android的Ashmem机制学习
  5. java时间格式转js_使用jquery或java脚本将日期时间转换为rfc3339格式
  6. spark 应用程序性能优化经验
  7. 数据算法之插入排序(insertSort)的Java实现
  8. Win11 BitLocker驱动器加密怎么使用
  9. linux建ftp用户限制访问,Linux下建ftp用户并限制用户访问路径
  10. 鸿蒙系统微信红包,鸿蒙道红包版
  11. Hi3520d 网卡驱动源码分析
  12. 【高数】数学符号及读法大全and数学运算符号及含义
  13. 在深度学习时代用 HowNet 搞事情 刘知远 01-09
  14. 12864 C语言程序 带详细注解
  15. houseprice_analysis_广州房子租售比分析(上)
  16. java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件
  17. 计算机辅助翻译专业实训报告,计算机辅助翻译实训报告格式.docx
  18. bowen -猜拳游戏
  19. SparkMllib模型选择与优化-网格搜索和交叉验证
  20. 一元多项式的相加和相减操作(链表)

热门文章

  1. 火牛单片机rtc时钟配置_STM32单片机RTC时钟的使用方法及步骤
  2. 什么是Web服务端点?
  3. 敏捷 橄榄球运动_传送大学橄榄球的最便宜方法(无电缆)
  4. Karen莫文蔚签约索尼音乐 携音乐厂牌荣耀回归
  5. 基于linux的mp3播放实现代码
  6. JDK 8 之 List排序
  7. 精益数据分析 - 第8章 商业模式一:电子商务
  8. jQuery 京东轮播图案例(三种实现方式)
  9. 计算机电脑硬盘怎么删除内存,电脑虚拟内存怎么删除
  10. 通知:2021年0基础理财交流群正式开放!扫码进!