欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(一)自学java必备技能开头篇:下载哔哩哔哩文件改名

程序员文章站 2022-07-12 18:23:06
...

一、前言

  本人是自学java,无意中发现了B站这个可以学习的网站,但是在B站上面学习实在是太痛苦了,如果网络不好的情况下更加是痛苦,尤其是对于我这种精益求精具有强迫症的人来说简直是雪上加霜。

  而且如果要在B站上截图做笔记,也是非常的不快,用Q截图的时候,按住ctrl后就会弹出视频的显示,让人非常的不快,最痛苦就是如果不是会员,还得忍受80%加载的速度。简直是不能忍,播放加速方面感觉也有欠缺。最高只有2.0的加速,这样对于脑回路比较大的我来说,往往是不够的!

  有同学就想着将B站的视频下载下来,用爱奇艺万能联播进行播放(这是目前我个人而言觉得比较给力的播放器了,快进不失音),但是下载的视频的格式往往是这样的,用播放器读取视频也不知道这个视频具体是什么信息,导致在做笔记的时候也比较的不方便。

(一)自学java必备技能开头篇:下载哔哩哔哩文件改名

  有没有一种好的方法呢?

二、代码实现

  废话就不多说了,直接代码上撸起来。

1.分析下载后的文件格式

  包含.info的文件信息,就包含了视频的文件名!

  我这里下载的是尚硅谷的学习视频资料,这家视频还不错,值得去看看。

(一)自学java必备技能开头篇:下载哔哩哔哩文件改名

看到没 ,文件格式就是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.生成后的结果图

(一)自学java必备技能开头篇:下载哔哩哔哩文件改名

万能联播效果图

(一)自学java必备技能开头篇:下载哔哩哔哩文件改名

一般我都是开2.3倍加速,听起来不错。回退,快进也特别方便,没有烦人的加载中......美滋滋