若依项目名、包名修改器

Updater.java

import java.io.File;
import java.util.*;public class Updater {public static void main(String[] args) {String projectPath="D:\\workspace\\idea\\RuoYi-Cloud-Plus-2.X";updateNames(new File(projectPath));}//需要改名的目录名称(包含即可)static Map<String,String> reNameDirMap=new LinkedHashMap<>();static {reNameDirMap.put("ruoyi","zyym");reNameDirMap.put("RuoYi","Zyym");reNameDirMap.put("RUOYI","ZYYM");reNameDirMap.put("ruoYi","zyym");reNameDirMap.put("dromara","zyym");reNameDirMap.put("Dromara","Zyym");reNameDirMap.put("DROMARA","ZYYM");}//需要改名的父级目录名称(org.dromara这种,改org为com)static Map<String,String> reNameDirMapByParent=new LinkedHashMap<>();static {reNameDirMapByParent.put("org","com");}//需要改名的文件名称(包含即可)static Map<String,String> reNameFileMap=new LinkedHashMap<>();static {reNameFileMap.put("ruoyi","zyym");reNameFileMap.put("RuoYi","Zyym");reNameFileMap.put("RUOYI","ZYYM");reNameFileMap.put("ruoYi","zyym");reNameFileMap.put("dromara","zyym");reNameFileMap.put("Dromara","Zyym");reNameFileMap.put("DROMARA","ZYYM");reNameFileMap.put("ry-","zyym-");reNameFileMap.put("_ry_","_zyym_");}//哪些文件后缀需要修改内容static List<String> reContentExtList=new ArrayList<>();static {reContentExtList.add(".java");reContentExtList.add(".vue");reContentExtList.add(".js");reContentExtList.add(".ts");reContentExtList.add(".json");reContentExtList.add(".html");reContentExtList.add(".css");reContentExtList.add(".scss");reContentExtList.add(".yml");reContentExtList.add(".yaml");reContentExtList.add(".sql");reContentExtList.add(".xml");reContentExtList.add(".LoadBalance");reContentExtList.add(".vm");reContentExtList.add(".factories");reContentExtList.add(".imports");reContentExtList.add(".Filter");reContentExtList.add(".properties");reContentExtList.add("Dockerfile");reContentExtList.add(".md");}//需要改内容的关键词static Map<String,String> reContentKeyMap=new LinkedHashMap<>();static {reContentKeyMap.put("org.dromara","com.zyym");reContentKeyMap.put("ruoyi","zyym");reContentKeyMap.put("RuoYi","Zyym");reContentKeyMap.put("RUOYI","ZYYM");reContentKeyMap.put("ruoYi","zyym");reContentKeyMap.put("dromara","zyym");reContentKeyMap.put("Dromara","Zyym");reContentKeyMap.put("DROMARA","ZYYM");reContentKeyMap.put("com.zyym.sms4j","org.dromara.sms4j");//还原不需要替换的sms4jreContentKeyMap.put("com.zyym.easy","org.dromara.easy");//还原不需要替换的easy}//需要改内容的关键词(sql专用)static Map<String,String> reSqlKeyMap=new LinkedHashMap<>();static {reSqlKeyMap.put("ry-","zyym-");}//需要改内容的关键词(yml和properties专用)static Map<String,String> reYmlKeyMap=new LinkedHashMap<>();static {reYmlKeyMap.put("/ry-","/zyym-");}//改名public static void updateNames(File file) {if (file.isDirectory()) {File[] listFiles = file.listFiles();boolean exist=false;for (int i = 0; i < listFiles.length; i++) {if(reNameDirMap.containsKey(listFiles[i].getName())&&listFiles[i].isDirectory()){exist=true;}updateNames(listFiles[i]);}if(exist&&reNameDirMapByParent.containsKey(file.getName())){//修改名称org为comfile.renameTo(new File(file.getParentFile().getAbsolutePath()+File.separator+reNameDirMapByParent.get(file.getName())));}else{//修改名称ruoyi-xxx为zyym-xxx等各种包含的Set<String> keys = reNameDirMap.keySet();for (String key:keys) {if(file.getName().contains(key)){String newName = file.getName().replace(key, reNameDirMap.get(key));File newFile=new File(file.getParentFile().getAbsolutePath()+File.separator+newName);file.renameTo(newFile);if(!newFile.exists()){FileUtil.moveFile(newFile,file);}break;}}}}else if(file.isFile()){//修改名称ruoyi-xxx为zyym-xxx等各种包含的Set<String> keys = reNameFileMap.keySet();for (String key:keys) {if(file.getName().contains(key)){String newName = file.getName().replace(key, reNameFileMap.get(key));File newFile=new File(file.getParentFile().getAbsolutePath()+File.separator+newName);file.renameTo(newFile);if(!newFile.exists()){FileUtil.moveFile(newFile,file);}file=newFile;break;}}updateContent(file);}}//改内容public static void updateContent(File file) {//判断是否需要修改内容String suffiex = FileUtil.getSuffiex(file.getName());for (String s :reContentExtList) {if(file.getName().endsWith(s)){String content = FileUtil.readTextFile(file);for (String k:reContentKeyMap.keySet()) {if(content.contains(k)){content=content.replaceAll(k,reContentKeyMap.get(k));}}if(".sql".equals(suffiex)){for (String k:reSqlKeyMap.keySet()) {if(content.contains(k)){content=content.replaceAll(k,reSqlKeyMap.get(k));}}}if(".yml".equals(suffiex)||".properties".equals(suffiex)){for (String k:reYmlKeyMap.keySet()) {if(content.contains(k)){content=content.replaceAll(k,reYmlKeyMap.get(k));}}}//替换内容并保存FileUtil.saveTextFile(file,content);break;}}}
}

FileUtil.java


import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;/*** 文件相关工具类* * @author tang*/
public class FileUtil {/*** 判断文件大小是否合乎指定大小,如果超出,返回false,否则返回true* @param file* @param size_MB* @return*/public static boolean checkFileSize(File file, int size_MB) {long size = size_MB * 1024 * 1024;return file.length() > size ? false : true;}public static String makeNewFileName(String originalFileName) {return System.currentTimeMillis() + String.format("%03d", new Random().nextInt(1000)) + originalFileName.substring(originalFileName.indexOf("."));}/*** 修改文件后缀* @param filePath* @param newPostfix 文件后缀不带'.'* @return*/public static String resetPostfix(String filePath, String newPostfix) {String targetPath;int point_index = filePath.lastIndexOf(".");if (point_index != -1) {targetPath = filePath.substring(0, point_index) + "." + newPostfix;} else {targetPath = filePath + "." + newPostfix;}return targetPath;}/*** 获取文件所在的文件夹路径* @param filePath* @return*/public static String getFolderPath(String filePath) {return new File(filePath).getParent();}/*** 获取文件后缀名,不包括'.'* @param filePath* @return*/public static String getPostfix(String filePath) {String name=new File(filePath).getName();int lastIndexOf = name.lastIndexOf(".");if (lastIndexOf >= 0) {return name.substring(lastIndexOf + 1);}return "";}/*** 获取文件后缀名,包括'.'* @param filePath* @return*/public static String getSuffiex(String filePath) {String name=new File(filePath).getName();int lastIndexOf = name.lastIndexOf(".");if (lastIndexOf >= 0) {return name.substring(lastIndexOf);}return "";}/*** 获取文件名,不包括文件后缀名* @param filePath* @return*/public static String getPureName(String filePath) {File file=new File(filePath);String name = file.getName();int lastIndexOf = name.lastIndexOf(".");if (lastIndexOf >= 0) {return name.substring(0, lastIndexOf);}return name;}public static String getFileName(String filePath) {File file=new File(filePath);String name = file.getName();return name;}/*** 文件是否存在* @param file* @return*/public static boolean exists(File file) {return file != null && file.exists();}/*** 文件是否能写* @param targetFile* @return*/public static boolean isCanWrite(File targetFile) {if (targetFile == null) {return false;}if (targetFile.isDirectory()) {return false;}if (!targetFile.exists()) {return true;}try (FileOutputStream fos = new FileOutputStream(targetFile, true)) {return true;} catch (Exception e) {return false;}}public static String readTextFile(File file) {return readTextFile(file, "UTF-8");}public static String readTextFile(File file, String code) {try {return new String(Files.readAllBytes(file.toPath()), code);} catch (Exception e) {e.printStackTrace();}return null;}/*** 创建一个文件或文件夹,自动创建不存在的上级目录,如果文件或文件夹存在则不创建,* @param filePath* @return*/public static File createFile(String filePath) {File file = new File(filePath);if (file.exists()) {return file;}if (file.isDirectory()) {file.mkdirs();return file;}if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}try {file.createNewFile();} catch (Exception e) {e.printStackTrace();}return file;}/*** 保存字符串到一个文本文件(UTF-8),如果文件不存在则创建* @param filePath* @param content 文件内容*/public static void saveTextFile(String filePath, String content) {saveTextFile(new File(filePath), content);}/*** 保存字符串到一个文本文件(UTF-8),如果文件不存在则创建* @param file* @param content 文件内容*/public static void saveTextFile(File file, String content) {saveTextFile(file, content, "UTF-8");}/*** 保存字符串到一个文本文件,如果文件不存在则创建* @param file* @param content 文件内容* @param code 文件内容编码*/public static void saveTextFile(File file, String content, String code) {try {deleteFile(file);//不删除的话,写入的内容可能会莫名其妙多出一些东西,原因未知Files.write(file.toPath(), content.getBytes(code), StandardOpenOption.CREATE);} catch (Exception e) {e.printStackTrace();}}/*** 删除一个文件或文件夹(递归)* @param file*/public static void deleteFile(File file) {if (!exists(file)) {return;}if (file.isDirectory()) {File[] listFiles = file.listFiles();for (int i = 0; i < listFiles.length; i++) {deleteFile(listFiles[i]);}// Files.delete(file.toPath());file.delete();} else {file.delete();}}/*** 移动一个文件或文件夹(递归)*/public static void moveFile(File sourceFile, File targetFile) {if (!exists(sourceFile)) {return;}if (sourceFile.isDirectory()) {if (!targetFile.exists()) {targetFile.mkdirs();}File[] listFiles = sourceFile.listFiles();for (int i = 0; i < listFiles.length; i++) {File childTargetFile = new File(targetFile.getPath() + File.separator + listFiles[i].getName());moveFile(listFiles[i], childTargetFile);}sourceFile.delete();} else {try {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}Files.move(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);} catch (Exception e) {e.printStackTrace();}}}/*** 复制一个文件或文件夹(递归)*/public static void copyFile(File sourceFile, File targetFile) {if (!exists(sourceFile)) {return;}if (sourceFile.isDirectory()) {if (!targetFile.exists()) {targetFile.mkdirs();}File[] listFiles = sourceFile.listFiles();for (int i = 0; i < listFiles.length; i++) {File childTargetFile = new File(targetFile.getPath() + File.separator + listFiles[i].getName());copyFile(listFiles[i], childTargetFile);}} else {try {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);} catch (Exception e) {e.printStackTrace();}}}/*** 从字节输入流中读取所有字节* @param in* @return* @throws IOException*/public static byte[] readAllBytes(InputStream in) throws IOException {return readAllBytes(in, 2048);}/*** 从字节输入流中读取所有字节* @param in* @param initialSize 初始化字节数组长度,推荐设置为1024的整数倍* @return* @throws IOException*/public static byte[] readAllBytes(InputStream in, int initialSize) throws IOException {try (InputStream _in = in) {int capacity = initialSize;byte[] buf = new byte[capacity];int nread = 0;int rem = buf.length;for (int n = _in.read(buf, nread, rem); n > 0; n = _in.read(buf, nread, rem)) {nread += n;rem -= n;assert rem >= 0;if (rem == 0) {int newCapacity = capacity << 1;if (newCapacity < 0) {if (capacity == Integer.MAX_VALUE)throw new OutOfMemoryError("Required array size too large");newCapacity = Integer.MAX_VALUE;}rem = newCapacity - capacity;buf = Arrays.copyOf(buf, newCapacity);capacity = newCapacity;}}return (capacity == nread) ? buf : Arrays.copyOf(buf, nread);} catch (IOException e) {throw e;}}/*** 从字节输入流中读取所有字符串(UTF-8)* @param in* @return* @throws IOException*/public static String readAllString(InputStream in) throws IOException {return readAllString(in, Charset.forName("UTF-8"));}/*** 从字节输入流中读取所有字符串(指定编码)* @param in* @param code* @return* @throws IOException*/public static String readAllString(InputStream in, Charset code) throws IOException {if (code == null) {code = Charset.forName("UTF-8");}try (BufferedInputStream bis = new BufferedInputStream(in);InputStreamReader isr = new InputStreamReader(bis, code.newDecoder());BufferedReader reader = new BufferedReader(isr)) {StringBuffer sb = new StringBuffer();for (String line = reader.readLine(); line != null; line = reader.readLine()) {sb.append(line);}return sb.toString();}}/*** 从字符流中读取所有字符串* @param r* @return* @throws IOException*/public static String readAllString(Reader r) throws IOException {return readAllString(r, 1024);}/*** 从字符流中读取所有字符串* @param r* @param initialSize 初始化字符数组长度,推荐设置为1024的整数倍* @return* @throws IOException*/public static String readAllString(Reader r, int initialSize) throws IOException {try (BufferedReader br = new BufferedReader(r)) {StringBuffer sb = new StringBuffer();char[] b = new char[initialSize];for (int i = br.read(b); i > 0; i = br.read(b)) {sb.append(new String(b, 0, i));}return sb.toString();}}/*** 从字节输入流中读取所有字符串(UTF-8),并按行返回List* @param in* @return* @throws IOException*/public static List<String> readAllLines(InputStream in) throws IOException {return readAllLines(in, "UTF-8");}/*** 从字节输入流中读取所有字符串(指定编码),并按行返回List* @param in* @param code* @return* @throws IOException*/public static List<String> readAllLines(InputStream in, String code) throws IOException {try (Reader r = code == null ? new InputStreamReader(in) : new InputStreamReader(in, code)) {return readAllLines(r);}}/*** 从字符输入流中读取所有字符串,并按行返回List* @param r* @return* @throws IOException*/public static List<String> readAllLines(Reader r) throws IOException {try (BufferedReader br = new BufferedReader(r)) {List<String> result = new ArrayList<>();for (String line = br.readLine(); line != null; line = br.readLine()) {result.add(line);}return result;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GNURadio 软件在windows环境下安装

一、软件下载 网址&#xff1a;InstallingGR - GNU Radio 我已经下载的软件安装包&#xff0c;radioconda-2024.01.26-Windows-x86_64.rar 网址&#xff1a;https://download.csdn.net/download/weixin_37728585/89082238 二、安装过程 所有用户均可以使用。 选择安装路径&a…

一文彻底搞清 Iterator(遍历器)概念及用法

目录 一、由来及意义 二、具体实现流程 三、具有默认 Iterator 接口的数据结构 四、调用 Iterator 接口的场合 五、总结 一、由来及意义 Javascript中表示“集合”的数据结构&#xff0c;主要是 Array、Object、Map、Set 这四种数据集合&#xff0c;除此之外&#xff0c;…

每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]

删除字符串中的所有相邻重复项 题目&#xff1a;1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所…

JVM基础二——类的生命周期

加载阶段 &#xff1a; 连接阶段&#xff1a; 初始化阶段&#xff1a; 总结&#xff1a;

【Linux】SSH协议应用

SSH协议 SSH简介实现OpenSSH ssh中的四个文件~/.ssh文件路径实验解析 SSH 简介 SSH&#xff08;secure shell&#xff09;只是一种协议&#xff0c;存在多种实现&#xff0c;既有商业实现&#xff0c;也有开源实现。本文针对的实现是OpenSSH&#xff0c;它是自由软件&#xf…

React三大组件--ref

1.定义&#xff1a;组件内的标签可以定义ref属性来标识自己。 2.使用ref的三种方法 字符串形式的ref &#xff08;这个写法会慢慢替换掉&#xff0c;所以尽量不要写字符串形式&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta cha…

第18讲:数据在内存中的存储

⽬录 1. 整数在内存中的存储 2. ⼤⼩端字节序和字节序判断 3. 浮点数在内存中的存储 ——————————————————————————————————————————— 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#x…

力扣热题100_链表_21_合并两个有序链表

文章目录 题目链接解题思路解题代码 题目链接 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例…

jupyter Notebook 默认路径修改

1. anaconda prompt 中运行 jupyter notebook --generate-config 命令&#xff0c;将在 C:\Users\Think\.jupyter文件下生成 jupyter_notebook_config.py 文件。 2.在jupyter_notebook_config.py 文件中&#xff0c;找c.NotebookApp.notebook_dir 这个变量&#xff0c; (1)若…

Solana 线下活动回顾|多方创新实践,引领 Solana“文艺复兴”新浪潮

Solana 作为在过去一年里实现突破式飞跃的头部公链&#xff0c;究竟是如何与 Web3 行业共振&#xff0c;带来全新的技术发展与生态亮点的呢&#xff1f;在 3 月 24 日刚结束的「TinTin Destination Moon」活动现场&#xff0c;来自 Solana 生态的的专家大咖和 Web3 行业的资深人…

Java生产者消费者模式(等待唤醒机制)

1.生产者消费者模式 生产者消费者模式是一个十分经典的多线程协作的模式&#xff0c;主要用于解决多线程间的同步问题。它描述了两个类之间的协作&#xff1a;生产者和消费者。生产者负责生成数据&#xff08;或称为“产品”&#xff09;&#xff0c;而消费者负责消费这些数据…

LeetCode - 移除石子使总数最小

1962. 移除石子使总数最小 当我看到这道题目的时候&#xff0c;第一时间想到的是&#xff1a;while循环 sort&#xff0c;时间复杂度 k*nlogn。题目要求执行k次操作后&#xff0c;剩下狮子的最小总数&#xff0c;我们是否可以考虑维护一个堆呢&#xff1f;堆顶值最大&#xff…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《台风灾害下考虑多类型故障不确定性的源网荷协同弹性提升模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Leetcode_2两数相加

文章目录 前言一、两数相加1.1 问题描述1.2 解法一&#xff1a;分别将链表转为数字&#xff0c;然后相加1.3 代码实现1.4 解法二&#xff1a;分别将对应位置数字相加1.5 代码实现 二、使用步骤1.引入库2.读入数据 前言 链表是一种物理内存非连续存储&#xff0c;非顺序的线性数…

AI论文速读 |【综述】 时序分析基础模型:教程与综述

论文标题&#xff1a;Foundation Models for Time Series Analysis: A Tutorial and Survey 作者&#xff1a; Yuxuan Liang&#xff08;梁宇轩&#xff09;, Haomin Wen&#xff08;温浩珉&#xff09;, Yuqi Nie&#xff08;PatchTST一作&#xff09;, Yushan Jiang, Ming J…

windows安装Openssl

openssl官网:[ Downloads ] - /source/index.html Windows 安装方法 OpenSSL 官网没有提供 Windows 版本的安装包&#xff0c;可以选择其他开源平台提供的工具 Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 等待下载完成 捐不起 配置环境变量 ope…

【ZZULIOJ】1035: 分段函数求值(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 已知&#xff1a;y是x的函数, 当x<-2时&#xff0c;y7-2x&#xff1b; 当x>-2,且x<3时&#xff0c;y5-|3x2|&#xff1b; 当x>3时&#xff0c;y3x4 输入 任意输入一个整数x。 输出 …

LC 111.二叉树的最小深度

111. 二叉树的最小深度 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a; 叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a;…

苍穹外卖07(缓存菜品,SpringCache,缓存套餐,添加购物车菜品和套餐多下单,查看购物车,清除购物车,删除购物车中一个商品)

目录 一、缓存菜品 1 问题说明 2 实现思路 3 代码开发&#xff1a;修改DishServiceImpl 4 功能测试 二、SpringCache 1. 介绍 2. 使用语法 1 起步依赖 2 使用要求 3 常用注解 4 SpEL表达式(了解备用) 5 步骤小结 3.入门案例 1 准备环境 2 使用入门 1 引导类上加…

面试算法-140-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2…