用Java批量替换MD文件中的图片地址

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 用Java批量替换MD文件中的图片地址

背景


前两天Gitee的图床都被封了,所有的外链都无法访问,笔记全体火葬场,就像下面这样:



然后立马就将Gitee图床里的图片全部转移到了阿里云OSS存储服务里去了。


此时我的所有笔记想要替换其中的图片链接可是个大工程。



此时需求就来了,将目录下所有文件内容中Gitee链接替换为阿里云的链接。


思路如下:


1、核心功能三步骤:读取文件内容;将读取到的内容所有链接进行替换;将替换好的内容写入到目标路径。(单位是文件)
2、实现遍历文件目录:使用Files.walk()整个函数来进行。


项目地址:BatchReplcae-MDhref


使用方式


说明:本项目仅仅使用的是JDK提供的类库,无需引入第三方类库。


1、填写四个配置项



源目录:指的是就是你要替换的目录文件夹路径。


目标目录:就是所有文件替换好之后输出的路径。


我的需求是将我的笔记目录中所有md里内容替换如下:


https://gitee.com/changluJava/picture-bed/raw/master/替换为https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/beifen-gitee/

所以我的完整配置是:


/源目录
private static String COPY_ORIGN = "C:\\Users\\93997\\Desktop\\test";
//目标目录(可以填写自己本身源路径,达到覆盖效果。建议是输出到其他路径,防止有问题)
private static String COPY_TO = "C:\\Users\\93997\\Desktop\\test";
//被替换内容
private static String tihuan = "https://gitee.com/changluJava/picture-bed/raw/master/";
//替换内容
private static String tihuanTO = "https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/beifen-gitee/";


2、运行代码即可:



OK,此时打开文件可以看到里面的原来图床地址已经替换如下:



代码


代码地址见:BatchReplcae-MDhref,好用记得点个Star噢,谢谢!


package com.changlu;
import java.io.*;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.logging.Logger;
/**
 * 效果:将源目录所有md文件内容中tihuan配置内容替换为tihuanTO内容,最终输出到指定路径。
 * 配置说明:填写四个配置即可
 *   COPY_ORIGN:源目录
 *   COPY_ORIGN:目标输出目录(可填自己源目录)
 *   tihuan:被替换内容
 *   tihuanTO:替换内容
 *
 * 说明:想要将md文件中的1替换为2,那么被替换内容就是1、替换内容就是2
 *
 * @ClassName updateMD
 * @Author ChangLu
 * @Date 3/26/2022 11:42 AM
 * @Description 批量替换MD图片路径工具
 */
public class BatchReplaceUtil {
    private static Logger log = Logger.getLogger("com.changlu.updateMD");
    //源目录
    private static String COPY_ORIGN = "C:\\Users\\93997\\Desktop\\test";
    //目标目录
    private static String COPY_TO = "C:\\Users\\93997\\Desktop\\test";
    //被替换内容
    private static String tihuan = "https://gitee.com/changluJava/picture-bed/raw/master/";
    //替换内容
    private static String tihuanTO = "https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/beifen-gitee/";
    public static void main(String[] args) throws Exception{
        Files.walk(Paths.get(COPY_ORIGN)).forEach(path->{
            String originFile = path.toFile().getAbsolutePath();
            String targetFile = path.toFile().getAbsolutePath().replace(COPY_ORIGN, COPY_TO);
            try {
                //若是文件目录,则创建目标目录
                if (Files.isDirectory(path)) {
                    //判断是否存在,不存在则创建
                    if (!new File(targetFile).exists()) {
                        Files.createDirectory(Paths.get(targetFile));
                    }
                }else{
                    if (targetFile.contains(".md")){
                        //执行替换任务
                        doWork(originFile, targetFile, tihuan, tihuanTO);
                        System.out.println(targetFile + "已经覆盖完成!");
                    }else{
                        Files.copy(path, Paths.get(targetFile));
                    }
                }
            }catch (Exception e){
                if (e instanceof FileAlreadyExistsException){
                    log.info("目标文件:" + targetFile + " 已经存在");
                }else{
                    e.printStackTrace();
                }
            }
        });
        System.out.println("所有的文件已全部替换!");
    }
    private static void doWork(String originFile,String targetFile,String tihuan,String tihuanTO) throws IOException {
        //读取一个文件,获取到内容
        String content = readFile(originFile);
        //将内容中的文字进行替换
        String newContent = content.replaceAll(tihuan, tihuanTO);
        //写入到指定的目录
        writeFile(newContent, targetFile);
    }
    private static void writeFile(String newContent,String targetFile) throws IOException {
        File file = new File(targetFile);
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
        osw.write(newContent);
        osw.flush();
    }
    private static String readFile(String originFile) throws IOException {
        FileInputStream fis = new FileInputStream(originFile);
        final InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader bufferedReader = new BufferedReader(isr);
        String content = "";
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            content += line + "\r\n";
        }
        return content;
    }
}
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
68 9
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
11天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
74 34
|
28天前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
40 3
|
1月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
70 2
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
51 4
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
47 4
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
44 5
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
76 5
下一篇
DataWorks