下载网络文件到本地

文章目录

目录

前言

操作步骤

1.引入

2.读取出文件内容

3.筛选出URL

4.下载表情包

总结


前言

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

一、操作步骤

1.引入

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

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

2.读取出文件内容

代码如下:

c 复制代码
/**
	 * 读取本地文件内容转为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

代码如下:

java 复制代码
/**
	 * 正则匹配字符串中多个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.下载表情包

代码如下:

java 复制代码
/**
	 * 下载网络文件到本地磁盘
	 * 
	 * @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.执行代码

java 复制代码
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();

	}

总结

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

相关推荐
毅炼11 分钟前
MySQL 常见问题总结(1)
java·大数据·数据库
Rust研习社15 分钟前
深入 Rust 引用计数智能指针:Rc 与 Arc 从入门到实战
开发语言·后端·rust
CRMEB系统商城17 分钟前
国内开源电商系统的格局与演变——一个务实的技术视角
java·大数据·开发语言·小程序·开源·php
yaaakaaang26 分钟前
十八、中介者模式
java·中介者模式
一 乐28 分钟前
饮食营养信息|基于springboot + vue饮食营养管理信息平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·饮食营养管理信息系统
xyq202429 分钟前
Eclipse 安装(Neon 版本)指南
开发语言
冰暮流星36 分钟前
javascript之DOM更新操作
开发语言·javascript·ecmascript
飞Link42 分钟前
掌控 Agent 的时空法则:LangGraph Checkpoint (检查点) 机制深度实战
开发语言·python·算法
zopple1 小时前
Laravel与ThinkPHP框架深度对比
java·python·php·laravel
wuyoula1 小时前
全新轻量级高性能跨平台 AI聊天+AI网关桌面
服务器·开发语言·c++·人工智能