下载网络文件到本地

news2024/10/7 8:01:14

文章目录

目录

前言

操作步骤

1.引入

2.读取出文件内容

 3.筛选出URL

4.下载表情包

总结


前言

这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。

一、操作步骤

1.引入

首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在评论面板自然也是一个url链接,

我们只需F12打开审查表情包面板的代码,将带有多个表情包的html复制并保存到我们电脑文件中,再用正则筛选出各个url,将url用代码去下载该表情包文件并保存到本地文件即可。

 

2.读取出文件内容

代码如下:

/**
	 * 读取本地文件内容转为String字符串
	 * 
	 * @return
	 * @throws Exception
	 */
	public static String fileRead() throws Exception {
		File file = new File("D:\\emo\\emo.html");// 定义一个file对象,用来初始化FileReader
		FileReader reader = new FileReader(file);// 定义一个fileReader对象,用来初始化BufferedReader
		BufferedReader bReader = new BufferedReader(reader);// new一个BufferedReader对象,将文件内容读取到缓存
		StringBuilder sb = new StringBuilder();// 定义一个字符串缓存,将字符串存放缓存中
		String s = "";
		while ((s = bReader.readLine()) != null) {// 逐行读取文件内容,不读取换行符和末尾的空格
			sb.append(s + "\n");// 将读取的字符串添加换行符后累加存放在缓存中
			System.out.println(66666);
		}
		bReader.close();
		String str = sb.toString();
//        System.out.println(str );
		return str;
	}

文件内容


 3.筛选出URL

代码如下:

/**
	 * 正则匹配字符串中多个url
	 * 
	 * @return
	 * @throws Exception
	 */
	public static ArrayList<String> matchUrl() throws Exception {
        //多个URL的集合
		ArrayList<String> list = new ArrayList<String>();
        
        //示例字符串
		String str = "<div class=\"foy8gwIu\"><div class=\"KegQvOm6 bOlXi_Q3\"><div class=\"a2nFYRcv\">"
				+ "<img src=\"https://p3-pc-siq4%3D&amp;from=876277922\"><img src=\"https://p3-pc-s56as1d65samp;from=666666\">"
				+ "</div>";

		str = fileRead();//读取上一步内容

		Pattern pattern = Pattern.compile("<img [^>]*src=['\"]([^'\"]+)[^>]*>");
		Matcher matcher = pattern.matcher(str);

		while (matcher.find()) {
			String ss = matcher.group();
//		    System.out.println(ss.substring(10, ss.length()-2));
			list.add(ss.substring(10, ss.length() - 2));
		}
		return list;

	}

4.下载表情包

 代码如下:

/**
	 * 下载网络文件到本地磁盘
	 * 
	 * @param urlString 文件地址
	 * @param saveDir   本地磁盘路径
	 * @return
	 */
	public static String download(String urlString, String saveDir) {
		InputStream is = null;
		FileOutputStream os = null;
		try {
			// 构造URL
			URL url = new URL(urlString);
			// 打开连接
			URLConnection con = url.openConnection();
			// 输入流
			is = con.getInputStream();
			// 1K的数据缓冲
			byte[] bs = new byte[1024];
			// 读取到的数据长度
			int len;
			// 输出的文件流
//            String filename = System.getProperty("os.name").toLowerCase().contains("win") ?
//            		System.getProperty("user.home") + "\\Desktop\\temp.jpg" : "/home/project/temp.jpg";

			if (!new File(saveDir).exists()) {
				new File(saveDir).mkdirs();
			}

			String filename = saveDir + String.valueOf(System.currentTimeMillis()) + ".png";// 使用时间戳命名
			File file = new File(filename);
			os = new FileOutputStream(file, true);

			// 开始读取
			while ((len = is.read(bs)) != -1) {
				os.write(bs, 0, len);
			}

			return filename;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭链接
			try {
				if (null != os) {
					os.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if (null != is) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

 5.执行代码

public static void main(String[] args) throws Exception {
//		String url = "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-tsj2vxp0zn/852eb9046306409282f9ebf4e2414dff?x-expires=2006748000&amp;x-signature=YLdPxtVWwKfLJcIvExFzt84Clq4%3D&amp;from=876277922";
		String dir = "D:\\emotion\\";
//		System.out.println(download(url,dir));

		ArrayList<String> list = matchUrl();
		for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
			String url = (String) iterator.next();
			download(url, dir);
		}

//		fileRead();

	}

总结

今天突然想到之前想做一个自定义表情包面板,可以用表情来评论。后面再写一个自定义的表情面板插件。

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

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

相关文章

《Vue.js实战》——基础篇(1)

目录 资源&#xff1a;&#x1f31f; 一、初识Vue.js&#x1f44b; Vue.js是什么&#xff1f;&#x1f647; MVVM模式 ✍ Vue.js有什么不同 ☔ 如何使用Vue.js? ☁ 传统的前端开发模式 ☀ Vue.js的开发模式 &#x1f5fb; 二、数据绑定和第一个Vue应用 &#x1f5f…

嵌入式开发学习(STC51-16-ADC模数转换)

内容 通过ADC转换电路采集电位器AD值&#xff0c;将采集的AD值转换成电压值&#xff0c;通过数码管显示出来&#xff1b; 采集光敏电阻的AD值&#xff1b; 采集热敏电阻的AD值&#xff1b; 采集外部通道AIN3的电压值&#xff1b; 为了方便显示&#xff0c;我们可以通过独立…

NeRF室内重建对比:Nerfstudio vs. Luma AI vs. Instant-NGP

十年前&#xff0c;Matterport 改变了房地产业&#xff0c;让房地产买家可以进行数字旅游。 买家可以在房产内从一个点移动到另一个点并环顾四周。 与 2D 照片库相比&#xff0c;这是一个巨大的改进。 然而&#xff0c;买家仍然被房产内的一系列问题所困扰。 推荐&#xff1a;用…

程序员必读 | 《业务架构解构与实践》

之前看书大多"不求甚解", 意会即可&#xff0c;但是找一本新书看是可遇而不可求的。回过头来&#xff0c;摘抄研究一下已经看过的&#xff0c;也是别有一番风味的。本文就是对之前一本书的摘录。 文章中各种暗淡不一的图片&#xff0c;其实是在各种环境下&#xff0c…

Java中Date方法详解

先进行专栏介绍 本专栏是自己学Java的旅途&#xff0c;纯手敲的代码&#xff0c;自己跟着黑马课程学习的&#xff0c;并加入一些自己的理解&#xff0c;对代码和笔记 进行适当修改。希望能对大家能有所帮助&#xff0c;同时也是请大家对我进行监督&#xff0c;对我写的代码进行…

耗时6个月,我做了一款干净、免费、开源的AI数据库

一、Chat2DB简介 在消失的这段时间&#xff0c;我做了一款集成了AI的数据库管理工具Chat2DB。 他是数据库也集成了AIGC的能力&#xff0c;能够将自然语言转换为SQL&#xff0c;也可以将SQL转换为自然语言&#xff0c;还可以给出SQL的优化建议&#xff0c;可以极大提升效率。 …

使用RecyclerView构建灵活的列表界面

使用RecyclerView构建灵活的列表界面 1. 引言 在现代移动应用中&#xff0c;列表界面是最常见的用户界面之一&#xff0c;它能够展示大量的数据&#xff0c;让用户可以浏览和操作。无论是社交媒体的动态流、商品展示、新闻列表还是任务清单&#xff0c;列表界面都扮演着不可或…

智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异

智慧城市作为人类社会发展的新阶段&#xff0c;正日益引领着我们迈向数字化未来的时代。在智慧城市的建设过程中&#xff0c;地理信息系统&#xff08;GIS&#xff09;扮演着举足轻重的角色。而在GIS的发展中&#xff0c;二维和三维GIS作为两大核心技术&#xff0c;在城市规划与…

LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

今天讲 LeetCode 单周赛第 340 场&#xff0c;今天状态不好&#xff0c;掉了一波大分。 2614. 对角线上的质数&#xff08;Easy&#xff09; 这道题是最近第 2 次出现质数问题&#xff0c;注意 1 不是质数&#xff01; 质数判断&#xff1a;$O(n\sqrt(U))$ 2615. 等值距离和…

程序员吐槽培训班简历造假,经验包装竟拿到阿里外包26k的offer

关于程序员速成培训班的传言和八卦很多&#xff0c;近日&#xff0c;又有一个程序员发帖吐槽培训班简历造假&#xff0c;两个大四学生报了个培训班&#xff0c;竟然给包装成有三年工作经验的人&#xff0c;更离谱的是&#xff0c;竟然还拿到了阿里外包26k的offer…… 许多网友表…

数据结构---查找

&#x1f31e;欢迎来到数据结构的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f64f;作者水平很有限&#xff0c;如果发现错误&#xff…

axios在请求错误时获取不到err.response响应问题

一般来说&#xff1a; axios.request({...// 请求config }).then(res > console.log(success,res),err > console.log(err,err) )稍微拓展一下&#xff1a; import axios,{ AxiosRequestConfig, AxiosError, AxiosResponse } from "axios"; import { getToke…

​​五、驱动 - ​声卡构成(ASOC)

文章目录 1. 硬件结构2. 数据传输流向3. ASOC结构组成4. Linux alsa音频系统框架1. 硬件结构 codec:音频编解码器,负责处理音频信息,包括 ADC、DAC、Mixer、DSP,输入输出以及音量控制等所有与音频相关的功能; 对PCM音频数据进行D/A转换:将数字信号转换为模拟信号;对Mic、…

Effective Java笔记(27)消除非受检的警告

用泛型编程时会遇到讲多编译器警告 &#xff1a; 非受检转换警告&#xff08; unchecked cast warning &#xff09;、非受检方法调用警告、非受检参数化可变参数类型警告&#xff08; unchecked parameterized vararg type warning&#xff09;&#xff0c;以及非受检转换警告…

在linux系统上安装Nginx

1、关闭防火墙 systemctl disable firewalld.service 2、上传压缩包并解压到目标文件 cd /usr/local tar -zxvf nginx-1.22.0.tar.gz 3、安装Nginx相关依赖 yum install -y gcc-c zlib zlib-developenssl openssl-devel pcre pcre-devel 4、安装完毕后&#xff0c;进入ng…

Spring Boot集成Mybatis-Plus

Spring Boot集成Mybatis-Plus 1. pom.xml导包 <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql<…

FastAPI 构建 API 高性能的 web 框架(一)

如果要部署一些大模型一般langchainfastapi&#xff0c;或者fastchat&#xff0c; 先大概了解一下fastapi,本篇主要就是贴几个实际例子。 官方文档地址&#xff1a; https://fastapi.tiangolo.com/zh/ 1 案例1:复旦MOSS大模型fastapi接口服务 来源&#xff1a;大语言模型工程…

大厂容器云实践之路(二)

3-网易蜂巢的DOCKER实践之路 面临问题 场景分析 如何解决 功能性需求&#xff08;基础&#xff09; 第一步 技术支撑公有化 开发流程 场景分析 功能性需求&#xff08;基础&#xff09; 非功能性需求&#xff08;SLA&#xff09; 第二步 产品技术云端化 开发流程 场景分析…

易基因:m5C RNA甲基转移酶及其在癌症中的潜在作用机制|深度综述

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 近年来&#xff0c;5-甲基胞嘧啶&#xff08;m5C&#xff09;RNA修饰已成为通过编码和非编码RNA调控RNA代谢和功能的关键参与者。越来越多的证据表明&#xff0c;m5C可以调控RNA稳定性、…

MOSFET(四):区别JFET

一、JFET及工作原理 N沟道JFET是一种三极结构的半导体器件&#xff0c;包含源极&#xff08;S&#xff09;、漏极&#xff08;D&#xff09;、栅极&#xff08;G&#xff09;工作原理是通过栅源电压控制反型沟道的导电特性。 当栅极-源极电压为零或正电压时&#xff0c;沟道关…