
开发工具与关键技术:IDEA Java
撰写时间:2021/9/18
我相信很多人初学编程阶段都会用到B站,或者要学习补充什么知识时都会看一下b站的学习教程,我用电脑的浏览器直接看B站太麻烦,一般我都是用微软商店中的b站可以直接下载视频,但是微软PC版的B站软件播放器很垃圾,我想用喜欢的播放器播放视频这样我每次都不用打开b站再进行学习,但是问题来了:它的文件名称是这样的
当我把文件放到播放器中,它们不会自动排序,顺序是乱的,我看完一集要我还要自己找下一集的文件在哪里(这样会降低学习效率)。
所以我写了一段能对B站文件进处理的代码,这些代码并不单能对B战的文件进行处理,修改一下参数或更改方法的调用还能有其它用途。
如下图1所示我定义了一个递归方法,该方法只有两个参数一个是你需要读取的文件的根目录,一个是你要保存的最终目录。
这个方法可以读取该目录下的所有文件,利用增强for去遍历所有的文件包括目录,
判断如果是目录继续调用方法递归,如果是文件,就调用判断是否为视频文件的方法判断该文件是否为视频文件,该方法如图2所示
如果是视频,我就要开始截取它文件的序号,这要用到另外一个方法,如下图三
把文件的序号截取到了之后,就把它放到输出文件的名称之中,然后在序号的后面加上符合视频性质的名字。给你们看一下执行结果如图4
这些并不是全部,它还可以进行其它操作,比如读取一个文件夹中所有的视频并且限制视频大小,读取文件夹中所有的图片等等,下图就是封装的两个方法,一个是判断文件大小的,一个是判断文件是否为图片文件
最后我发出这个案例的全部源码
public class GetMP4 {
public static void main(String[] args) throws
IOException {
//多级文件的复制
File copyFile=new File("C:\Users\yasuo\AppData\Local\Packages\36699Atelier39" +
".forWin10_pke1vz55rvc1r\LocalCache\BilibiliDownload\93195247");//复制文件的路径
//最终路径
File NowFile=new File("F:\Java进阶");
//首先创建 判断该目录下是 否有该文件
if (!NowFile.exists()){ //如果是空就创建
NowFile.mkdir();
}//创建成功
ToAddFileList(copyFile,NowFile); //传入该文件路径判断子文件
// 将视频全部读取到 同一个格式中
}
//创建一个递归方法 获取到 所有文件的路径,
public static void ToAddFileList(File file,File NowFile) throws
IOException {
File[] listFile=file.listFiles();
String OriginalPathName=file.getName();
if(listFile!=null){
for (File srcF:listFile){
//判断文件是否为目录或是数据文件
if (srcF.isDirectory()){
//如果是目录就继续遍历文件
ToAddFileList(srcF,NowFile);
}else {
//首先判断是否是视频文件
if (isNotMP4(srcF)){ //判断是否为视频文件
// if(checkFileSize(30,srcF.length(),"M")){//判断文件字节
String SequenceName = GetBiliBiliMp4Num(srcF, OriginalPathName);
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcF));
BufferedOutputStream bos=
new BufferedOutputStream(new FileOutputStream(NowFile+"\"+SequenceName+
"集Java进阶.mp4"));
//用字节数组的格式添加数据
byte[] bytes=new byte[1024];
int len;
while ((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bos.close();
bis.close();
// }
}
}
}
}
}
//判断是否是视频文件
public static boolean isNotMP4(File file) {
String reg = "(mp4|flv|avi|rm|rmvb|wmv)";
Pattern p = Pattern.compile(reg);
return p.matcher(file.getName()).find();
}
// 判断图片文件
public static boolean isNotImg(File file){
String reg="(gif|jpg|jpeg|bmp|png)";
Pattern p=Pattern.compile(reg);
return p.matcher(file.getName()).find();
}
public static boolean checkFileSize(Integer MinLen,Integer MaxLen, Long size,String unit) {
double fileSize = 0;// 这个实际文件大小除去计量单位的初值
switch (unit.toUpperCase()) {
case "B":
fileSize = (double) size;
break;
case "K":
fileSize = (double) size / 1024;
break;
case "M":
fileSize = (double) size / 1048576;
break;
case "G":
fileSize = (double) size / 1073741824;
break;
}
if (MinLen!=null&&MaxLen==null){
return (fileSize>MinLen);//判断
} if (MinLen==null&&MaxLen!=null){
return (fileSize