下载csdn文章,并保存md笔记中的图片链接至本地

推荐1个下载别人csdn文章笔记的java项目:csdn-blog2markword-downloader

拿到别人的md笔记后,但是笔记中的图片又是以链接的格式给的,这个链接说不定后面就失效了,笔记也就看不到图片了。手动右键也可以保存图片,但是1个1个点太麻烦了,就练习一下正则的使用方法,把图片存下来。

一行一行的读取原来的md文档,每一行使用正则拿到匹配的图片链接,并保存到本地。

@Slf4j
public class TestReg {private static RestTemplate template = new RestTemplate();public static void main(String[] args) throws IOException {String filePath = "D:\\documents\\黑马rabbitmq\\mq基础\\MQ基础.md";File file = new File(filePath);// 创建同级目录下的assets文件夹File assetsFile = new File(file.getParent() + "\\assets");if (assetsFile.exists() || !assetsFile.isDirectory()) {assetsFile.mkdir();}RandomAccessFile raf = new RandomAccessFile(file.getParent() + "\\" + "_" + file.getName(), "rw");// 匹配图片链接所使用的正则// !\[.*?]\((https?:.*/(.*?\.(png|jpg|jpeg)))String imgLinkPattern = "!\\[.*?]\\((https?:.*/(.*?\\.(png|jpg|jpeg)))";Pattern p = Pattern.compile(imgLinkPattern);// Matcher matcher = p.matcher("11![image.png](https://cdn.nlark.com/yuque/0/2023/png/27967491/1686983181054-f2bcce85-1fce-412f-95cd-1ae829f8406f.png#averageHue=%239dce6d&clientId=uf9c47826-2719-4&from=paste&height=613&id=u84c8f02e&originHeight=760&originWidth=1695&originalType=binary&ratio=1.2395833730697632&rotation=0&showTitle=false&size=112976&status=done&style=none&taskId=u779e4d59-c9a8-4b1f-a49f-59c578c4ccd&title=&width=1367.3949141495996)121");// System.out.println(matcher.find());// System.out.println(matcher.group(1)); // 文件名// ![文件名](assets/文件名)String standardFormat = "![文件名](assets/文件名)";InputStreamReader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);BufferedReader bufReader = new BufferedReader(reader);String line = null;while ((line = bufReader.readLine()) != null) {Matcher matcher = p.matcher(line);if (matcher.find()) {String fileName = matcher.group(2);String imgUrl = matcher.group(1);String standardFileName = standardFormat.replaceAll("文件名", fileName);// System.out.println(imgUrl);// System.out.println(fileName);// System.out.println(standardFileName);saveImgToLocal(imgUrl, fileName, file.getParent());raf.write(standardFileName.getBytes(Charset.defaultCharset()));} else {raf.write(line.getBytes(Charset.defaultCharset()));}raf.write("\r\n".getBytes(Charset.defaultCharset()));}raf.close();}public static void saveImgToLocal(String imgUrl, String fileName, String dir) {log.info("获取图片, imgUrl: {}, fileName: {}, dir", imgUrl, fileName, dir);try {Resource resource = template.getForObject(imgUrl, Resource.class);FileOutputStream fos = new FileOutputStream(dir + "\\assets\\" + fileName);StreamUtils.copy(resource.getInputStream(), fos);fos.close();} catch (Exception e) {log.error("获取图片失败, imgUrl: {}, fileName: {}, dir", imgUrl, fileName, dir);}}}

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

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

相关文章

前端学习笔记 7:小兔鲜

前端学习笔记 7:小兔鲜 准备工作 创建项目 创建项目: npm init vuelatest相关选项如下: 在src目录下添加以下目录: 别名路径联想 默认情况下在 VSCode 中输入import xxx from ...时不会启用路径联想功能,要启用需…

使用宝塔面板安装wiki.js详细教程

因为在安装过程中遇到了一些问题,花费了很长时间在解决问题上。根据这篇教程可以少踩很多坑。点赞加关注吧。 准备运行环境 Nodejs 在宝塔面板的软件商店中找到nodejs版本管理器并安装。 点击设置,选择一个稳定版安装。 PostgreSQL 官方推荐的数据库是…

用户洞察:精准解读用户的真实需求!

洞察用户需求的过程和谈恋爱一样。你不能简简单单地问客户,你想要什么?你有什么痛点?这样的问法是无法得到任何有价值的信息。这就好比谈恋爱的场景,如果你问对方想吃什么,大概率会得到“随便”“都行”这类的答案&…

Python实现一个简单的烟花秀效果(附带源码)

在 Python 中实现一个简单的烟花秀效果,可以使用 turtle 模块进行绘图。以下是一个简单的例子: import turtle import random import math# 设置画布 turtle.speed(0) turtle.hideturtle() turtle.bgcolor("black")def create_firework(x, y)…

力扣62. 不同路径

动态规划 思路: 定义 dp[r][c] 为到达坐标 (r, c) 的路径数: 它只能有同一行左边相邻方格向右到达或者同一列上方相邻方格向下到达;状态转移方程: dp[r][c] dp[r][c - 1] dp[r - 1][c]初始状态 dp[0][0] 1第一行的路径数是 1第…

2526. 随机数生成器(BSGS,推导)

题目路径: https://www.acwing.com/problem/content/2528/ 思路:

HNU-数据挖掘-实验1-实验平台及环境安装

数据挖掘课程实验实验1 实验平台及环境安装 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验1 实验平台及环境安装实验背景实验目标实验步骤1.安装虚拟机和Linux平台&#xff0c;熟悉Ubuntu环境。2.在Linux平台上搭建Python平台&#xff0c;并安装…

esp32-idf eclipse 分区表(partition table / NVS)的读写demo

前言&#xff1a; 分区表&#xff08;Partition Table&#xff09;和 NVS&#xff08;Non-Volatile Storage&#xff09;是 ESP-IDF 中用于存储数据的两种不同机制。 分区表&#xff08;Partition Table&#xff09;&#xff1a; 分区表定义了将 Flash 存储器划分为不同逻辑分…

RT-DETR 模型改进 | AKConv:具有任意采样形状和任意参数数量的卷积核

基于卷积操作的神经网络在深度学习领域取得了显著的成果,但标准卷积操作存在两个固有缺陷。一方面,卷积操作受限于局部窗口,无法捕捉其他位置的信息,而其采样形状是固定的。另一方面,卷积核的大小固定为kk,呈固定的正方形形状,而参数数量往往随大小呈平方增长。显然,不…

2024 年大促入手哪些云服务器实用划算?

2024年各大云厂商的“价格战”又已拉开帷幕&#xff0c;作为用户的我们最为关心的是这些云服务商的年终大促中&#xff0c;实用划算的云服务器配置有哪些&#xff1f;小编看了一下&#xff0c;今年的年终大促活动中&#xff0c;国内云平台几位大佬&#xff0c;阿里云&#xff0…

C++入门学习(十一)字符型

C中的字符型可以表示ASCII码中的所有字符&#xff0c;包括字母、数字、标点符号等。 ASCII码是一种用于编码字符的编码系统&#xff0c;它使用不同的数值来表示不同的字符。ASCII码使用7位或8位二进制数来表示每个字符&#xff0c;因此可以表示128或256个不同的字符。 在ASCI…

构建开源的多模态 RAG 系统

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Building an Open Source Multi-Modal RAG System 原文地址:https://medium.com/nadsoft/buil…

性能利器Caffeine缓存全面指南

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们聊聊Caffeine缓存&#xff0c;小黑在网上购物&#xff0c;每次查看商品都要等几秒钟&#xff0c;那体验肯定不咋地。但如果用了缓存&#xff0c;常见的商品信息就像放在口袋里一样&#xff0c;随时取用&…

Ubuntu22.04安装各种常用软件-目录

0、基本环境搭建 Ubuntu 22.04 基础环境搭建 1、安全类 Ubuntu 22.04 安装Fail2Ban 2、监控类 Ubuntu 22.04 安装prometheus 3、工具类 Ubuntu 22.04 Cron使用 Ubuntu 22.04 安装docker 4、数据库 Ubuntu 22.04 安装MySql 5、集群类 Ubuntu 22.04 安装docker

Linux查找日志常用命令

tail tail命令常使用选项-f -f, --follow[{name|descriptor}]output appended data as the file grows;an absent option argument means descriptor例如&#xff1a; tail -1000f sys.log按回车键增加空白行&#xff0c;按Ctrl C 结束 vi / vim vi 文件名 如&#xff1a;…

杭电网课笔记

技巧 1.判断得数为整数还是小数&#xff0c;可以%1&#xff0c;得数为0是整数 或者用instanceof Integer number 9; // 自动装箱 System.out.println(number instanceof Integer); // 输出&#xff1a;true 2.a * b 最大公约数 * 最小公倍数 LCM 最小公倍数 GCD 最大公…

Java:扫码登录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、需求背景 二、问题分析 三、对比APP和打印机设备的特点 四、设计 五、编码 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、…

美团收银餐饮版培训教程

硬件连接方式及介绍: 双屏收银机 收银一体机 双屏收银机连接图 收银一体机连接图 前台打印机 后厨打印机 标签打印机 前台打印机连接图 后厨打印机连接图 其它收银机配件 软件前期设置 1、机器联网 点开桌面的设置&#xff0c;点击更多&#xff0c;点击以太网&#xff0c;最上…

Linux,常见的强制退出/结束命令(ctr+c/ctr+d/:q/exit)

PS&#xff1a; 一直搞不清楚&#xff0c;这四个命令区别&#xff0c;干脆每个都输入一遍&#xff0c;逮着哪个算哪个。 1. CtrlC用途&#xff1a; 中断正在运行的程序或命令。&#xff08;例如输入Ping命令一直处于等待状态&#xff0c;就像是进程一直等待干脆杀死&#xff0…

SpringBoot之文件上传

1、文件上传原理&#x1f618; 表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 当表单的enctype"application/x-www-form-urlencoded"&#xff08;默认&#xff09;时&#xff0c;form表单中的数据格式为&#xff1a;keyvalue&keyvalue …