(一)自学java必备技能开头篇:下载哔哩哔哩文件改名
一、前言
本人是自学java,无意中发现了B站这个可以学习的网站,但是在B站上面学习实在是太痛苦了,如果网络不好的情况下更加是痛苦,尤其是对于我这种精益求精具有强迫症的人来说简直是雪上加霜。
而且如果要在B站上截图做笔记,也是非常的不快,用Q截图的时候,按住ctrl后就会弹出视频的显示,让人非常的不快,最痛苦就是如果不是会员,还得忍受80%加载的速度。简直是不能忍,播放加速方面感觉也有欠缺。最高只有2.0的加速,这样对于脑回路比较大的我来说,往往是不够的!
有同学就想着将B站的视频下载下来,用爱奇艺万能联播进行播放(这是目前我个人而言觉得比较给力的播放器了,快进不失音),但是下载的视频的格式往往是这样的,用播放器读取视频也不知道这个视频具体是什么信息,导致在做笔记的时候也比较的不方便。
有没有一种好的方法呢?
二、代码实现
废话就不多说了,直接代码上撸起来。
1.分析下载后的文件格式
包含.info的文件信息,就包含了视频的文件名!
我这里下载的是尚硅谷的学习视频资料,这家视频还不错,值得去看看。
看到没 ,文件格式就是json格式,那么既然是json,就好解决了。思路就是读取这个文件,然后解析出这个字段的name值,再将视频文件重命名即可。
话不多说,代码撸起。
2.代码实现:Java语言实现
这段代码是一个工具类,具体作用就是读取这个.info的文件,然后将它的数据以String格式返回。
package bilibili;
import java.io.*;
public class ReadFile {
public static String readFileContent(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
String encoding = "UTF-8";
StringBuilder sbf = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file),encoding));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
}
reader.close();
return sbf.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return sbf.toString();
}
}
3.主要代码实现、
package bilibili;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import util.StringUtils;
import java.io.File;
import java.util.Objects;
/**
* @author ilongsay
* @date: Create in 2020-04-11 18:48
*/
public class BilibiliSetTitle {
public static void renameFile(String filePath) {
System.out.println("========start transform=============");
File file = new File(filePath);
//获取所有的文件,不包括子文件
File[] listFiles = file.listFiles();
for (File listFile : Objects.requireNonNull(listFiles)) {
if (listFile.isDirectory()) {
//如果是文件夹,读取文件夹内的文件
File file1 = new File(listFile.getAbsolutePath());
File[] listFiles1 = file1.listFiles();
String title=null;
for (File file2 : Objects.requireNonNull(listFiles1)) {
String fileName = file2.getName();
//包括info的就是其信息
if (fileName.contains(".info")) {
String fileContent = ReadFile.readFileContent(file2.getAbsolutePath());
JSONObject object = JSON.parseObject(fileContent);
title = object.get("PartName").toString();
//这里的break就是减少循环次数,提升性能
break;
}
}
for (File file2 : listFiles1) {
String fileName = file2.getName();
if (fileName.contains(".flv")&& StringUtils.isNotEmpty(title)) {
//新的文件名称
String newNamePath = listFile.getAbsolutePath() + "/" + title+".flv";
File newFile = new File(newNamePath);
file2.renameTo(newFile);
break;
}
}
}
}
System.out.println("========endTransform============");
}
public static void main(String[] args) {
//b站下载的文件夹目录,如果要批量更改多个目录也可以自己实现一下,原理都是一样的
//目前只实现了单个文件夹修改
renameFile("E:\\study\\77774320");
}
}
4.需要添加的pom依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
5.生成后的结果图
万能联播效果图
一般我都是开2.3倍加速,听起来不错。回退,快进也特别方便,没有烦人的加载中......美滋滋
上一篇: [测试] Postman自动化接口测试-newman
下一篇: 性能测试总结(一)---基础理论篇