批量修改bilibili下载视频的文件名

<font size=4>

[TOC]

需求

在bilibili上下载了学习视频,bili的客户端看视频非常不方便,习惯用potplayer看视频;但是bili上下载视频的文件名都是类似50200264_1_0.flv这样格式,所以就修改成bili上对应的详细介绍的文件名,类似01 介绍及快速搭建 Spring Boot 项目这个格式的。

分析

  1. 查看下载视频的目录,发现在视频全集下面分了两层目录

    文件目录

  2. 最底层有三个文件,其中flv文件,是视频文件,也是需要重命名的文件; xml文件记录的是弹幕; info文件记录的是文件信息,查看info文件可知,有个 "PartName" 字段记录的是文件名,获取这个字段信息即可。

    PartName

  1. 思路

    1. 遍历视频全集文件夹
    2. 读取info文件,截取"PartName"字段信息即文件名,排序后将文件名保存到临时文件demo.txt
    3. 手动修改demo.txt文件内容,修改成整齐的格式
    4. 遍历文件夹,获取flv文件的文件名,并截取其中的序号,比如 50200264_1_0.flv,获取中间的序号1,作为index
    5. 按行顺序读取demo.txt文件,将读取的文件名保存到ArrayList中,通过步骤4中的index-1获取
    6. 重命名

实现

  1. info结尾的文件保存到fileList

    /*** 遍历文件夹,将info结尾的文件保存到fileList中* @param filePath* @return*/
    public static List<File> getFileList(String filePath) {File dir = new File(filePath);// 该文件目录下文件全部放入数组File[] files = dir.listFiles();if (files != null) {for (int i = 0; i < files.length; i++) {String fileName = files[i].getName();// 判断是文件还是文件夹if (files[i].isDirectory()) {// 获取文件绝对路径getFileList(files[i].getAbsolutePath());} else if (fileName.endsWith("info")) {// 判断文件名是否是以info结尾String strFileName = files[i].getAbsolutePath();fileList.add(files[i]);} else {continue;}}}return fileList;
    }
    
  2. 获取“PartName”字段信息,将字符串添加到list列表,并进行排序

    /*** 获取“PartName”字段信息,将字符串添加到list列表,并进行排序* @param fileListNew   新的文件列表* @return*/
    public static List<String> sortString(List<File> fileListNew) {List<String> strList = new ArrayList<>(16);for (int i = 0; i < fileListNew.size(); i++) {File file = fileListNew.get(i);try {BufferedReader br = new BufferedReader(new FileReader(file));String str;while ((str = br.readLine()) != null) {// 获取“PartName”字段对应的文件名String partName = str.split(",")[18].split(":")[1];// 字文件名添加到ListstrList.add(partName);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// 排序获取到的文件名Collections.sort(strList);return strList;
    }
    
  3. 将排序后的字符串写入到文件中

    /*** 将排序后的字符串写入到文件中* @param newFileName   新文件路径* @param stringList    字符串列表* @throws IOException*/
    public static void writeFile(String newFileName, List<String> stringList) throws IOException {FileWriter fw = new FileWriter(newFileName);BufferedWriter bw = new BufferedWriter(fw);for (int i = 0; i < stringList.size(); i++) {String str = stringList.get(i);bw.append(str + "\r\n");}bw.close();
    }
    
  4. flv文件名,保存到fileList

    /*** 遍历文件夹,将flv结尾的文件名,添加到fileList中** @param filePath* @return*/
    public List<File> getFileList(String filePath) {File dir = new File(filePath);// 该文件目录下文件全部放入数组File[] files = dir.listFiles();if (files != null) {for (int i = 0; i < files.length; i++) {String fileName = files[i].getName();// 判断是文件还是文件夹if (files[i].isDirectory()) {// 获取文件绝对路径getFileList(files[i].getAbsolutePath());} else if (fileName.endsWith("flv")) {// 判断文件名是否是以flv结尾String strFileName = files[i].getAbsolutePath();// logger.info("strFileName : " + strFileName);fileList.add(files[i]);} else {continue;}}}return fileList;
    }
    
  5. demo.txt文件中,获取目标文件名,并添加到List中

    /*** 读取demo.txt文件,获取目标文件名,并添加到ArrayList中* @param file* @return*/
    public List<String> readeFile(File file) {List<String> strList = new ArrayList<>();try {BufferedReader br = new BufferedReader(new FileReader(file));String lines;while ((lines = br.readLine()) != null) {strList.add(lines);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return strList;
    }
    
  6. 读取demo.txt文件获取目标文件名,并通过遍历fileList获取flv文件名,然后重命名

    /*** 重命名文件* @param demo  demo.txt文件*/
    public void renameToEnd(File demo) {// 读取demo.txt中的文件名,并保存demoList中List<String> demoList = readeFile(demo);for (int i = 0; i < fileList.size(); i++) {// 获取flv文件File fileOld = fileList.get(i);// 截取flv文件名中的序号String str = fileOld.getName().split("_")[1];// 将String类型的序号转成int类型int anInt = Integer.parseInt(str);// 获取flv文件的路径String newPathTemp = fileOld.getPath().split("57936239_")[0];String newPath = newPathTemp.endsWith("\\") ? newPathTemp : newPathTemp+"\\";// 拼接成新的文件名String newFileName = newPath + demoList.get(anInt-1) + ".flv";// 创建新的文件File dest = new File(newFileName);// 重命名if (fileOld.renameTo(dest)) {System.out.println("重命名成功: " + dest.getName());}}
    }
    

结果

  1. 修改后的结果如下,需要注意的是,修改文件名后,bilibili的客户端就不能再查看文件了。

    修改后的文件名

  1. PotPlayer文件列表展示如下:

    PotPlayer播放列表

批量修改bilibili下载视频的文件名相关推荐

  1. 源码:批量修改喜马拉雅下载节目的文件名

    长久未登录CSDN了,发现之前的博文,批量修改喜马拉雅下载节目的文件名下有很多朋友留言,需要代码的人很多,看来有困难的人还不少. 在此,贴出代码,有需要的朋友可以下载使用. 用法: cd 下载目录 ( ...

  2. C++调用ffmpeg批量合并bilibili缓存视频

    文章目录 前言 一.先看效果 二.开始写代码 1.遍历文件 2.获取视频标题和视频名称 3.生成视频 4.主函数 总结 前言 手机bilibili缓存了很多视频,想导入电脑看,但发现缓存的视频被分割成 ...

  3. 玩点不一样的,如何使用MATLAB实现批量修改文件后缀名,文件名,批量复制文件

    1.  自动批量修改文件后缀名,有时非常有用. 对于文件名没有要求,不用是序列文件名.比如需要将abaqus的inp文件修改成txt文件,便于使用 textscan和 textread等函数操作. c ...

  4. 【精华】批量修改文件夹中的文件名

    转载自[批量修改文件名] 原文地址如下:http://t.csdn.cn/tGsfz 1.在所需批量修改文件名的文件夹内新建一个改.txt文件,并在新建的txt文件中输入dir> 1.txt 2 ...

  5. 怎么批量修改多个视频的尺寸大小?

    有大量的视频需要修改视频的尺寸大小,用什么方法可以批量进行操作呢?今天小编就来给大家推荐一个可以批量处理视频的方法,快进来看看吧! 首先大家打开浏览器搜索一下"固乔科技",然后在这 ...

  6. java批量修改指定目录下的文件名

    package io; import java.io.File; import java.io.IOException;/*** @Auther: Code* @Date: 2018/9/9 18:0 ...

  7. 批量修改多目录下相同文件名的文件内容

    目前的情况: 在/data/test/目录中,有很多子目录,每个子目录中都包括一个文件名为"HD"的文件 现在想把所有的HD文件的内容修改成统一的内容,比如"0" ...

  8. Python使用you-get批量下载bilibili网站视频

    需要安装python,然后pip install you-get. 安装步骤在官方说明上很清楚,就不写了. 使用 you-get --playlist  -o F:\bilibili https:// ...

  9. 【Python】批量修改照片文件名为拍摄日期

    更新2022.09.09 代码已经大幅更新,需要的同学可以去这篇博客自取. 更新 2021.05.07 合并了修改照片的拍摄日期和文件名功能,请看:批量修改照片的拍摄日期和文件名 需求 最近整理老照片 ...

  10. 【Python】批量修改照片日期

    更新2022.09.09 代码已经大幅更新,需要的同学可以去这篇博客自取. 更新 2021.05.07 合并了修改照片的拍摄日期和文件名功能,请看:批量修改照片的拍摄日期和文件名 需求 最近整理老照片 ...

最新文章

  1. 大数据为何让传统银行焦虑?
  2. OpenGL vs D3D
  3. Hadoop 2.0联邦机制
  4. 【Python Turtle合集】有趣好玩的代码当然要分享给大家啦~(皮卡丘、玫瑰花、小黄人......)
  5. 利用oc门或od门实现线与_景县专业门球场专用人造草坪甄选博翔远
  6. linux 查看和修改文件编码的方法
  7. 学习笔记----周志华《机器学习》第五章(神经网络)(一)
  8. Mac-ios下JDK的安装路径(java)
  9. Maven deploy部署jar到远程私服仓库
  10. MySQL多实例配置
  11. strncpy 用法
  12. warning C4819: The file contains a character that cannot be represented in the current code page
  13. 中国主要的区块链公司以及融资情况
  14. C语言中按位取反操作符详解
  15. 针对HTTPS网页打开缓慢或者打不开的问题
  16. swift 指定区域截图,自定义不规则图形截图
  17. 小程序uv访客怎么刷_微信小程序获取访客数据-使用攻略
  18. [日常] Go语言圣经前言
  19. win10进不了BIOS界面
  20. eovs实训报告总结心得_实训报告心得体会

热门文章

  1. 设计原则与设计模式定义
  2. xamp:在shell中运行mysql
  3. python msproject_MS Project(*.mpp文件)到PowerBi
  4. 培根芦笋卷+蚝油家常豆腐+春笋甜椒拌饭
  5. BouncyCastle使用注意事项
  6. ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Colored path-dp)
  7. 【百度】怎么使用cookie登陆百度账号
  8. 淘宝API 如何获取颜色 尺码 属性表
  9. leetcode33. 搜索旋转排序数组
  10. 从coursera网站自动下载网课视频(Linux中bash操作)