今日份代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List; public class FileTest { public static void main(String[] args) throws IOException { //输出文件目录
String outputPath = "D:\\userOwner\\bili\\output\\"; //1.指定一级路径
String path = "D:\\userOwner\\bili\\input";
File oneLevelFile = new File(path);
System.out.println(String.format("一级路径:%s, 是否存在:%s", oneLevelFile.getAbsolutePath(),oneLevelFile.exists())); //2.获取二级路径
File[] twoLvelFiles = oneLevelFile.listFiles();
System.out.println(String.format("二级目录总数量:%s", twoLvelFiles.length)); Integer num = 0;
for (File twoLvelFile : twoLvelFiles) {
System.out.println(String.format("二级路径名称:%s", twoLvelFile.getName())); //3.进入三级路径
File[] threeLevelFiles = twoLvelFile.listFiles();
System.out.println(String.format("三级目录总数量是否为1:%s,三级路径名称:%s",
threeLevelFiles.length == 1, threeLevelFiles[0].getName()));
File threeLevelFile = threeLevelFiles[0]; //4.进入四级路径
File[] fourLevelFiles = threeLevelFile.listFiles();
System.out.println(String.format("四级目录总数量是否为3:%s,是否存在entry.json文件:%s,是否存在16文件夹:%s",
fourLevelFiles.length == 3, fourLevelFiles[2].getName().equals("entry.json"), fourLevelFiles[0].getName().equals("16"))); //5.从entry.json文件获取对应title
String thisFileTitle = "";
File entryJsonFile = fourLevelFiles[2];
List<String> entryJsonStrList = Files.readAllLines(Paths.get(entryJsonFile.getAbsolutePath()), StandardCharsets.UTF_8);
JSONObject jsonObject = JSON.parseObject(entryJsonStrList.get(0));
thisFileTitle = jsonObject.getString("title");
System.out.println(String.format("entry.json文件中获取title:%s", thisFileTitle)); //6.从16文件夹中进入五级路径
File[] fiveLevelFiles = fourLevelFiles[0].listFiles();
System.out.println(String.format("五级目录总数量是否为3:%s,是否存在audio.m4s文件:%s",
fiveLevelFiles.length == 3, fiveLevelFiles[0].getName().equals("audio.m4s"))); //7.拷贝audio.m4s文件到新目录下并完成重命名动作
File dest = new File(outputPath+thisFileTitle+".m4s");
copyFileUsingFileStreams(fiveLevelFiles[0], dest);
System.out.println(String.format("拷贝audio.m4s文件到新目录下并完成重命名动作,全新文件地址:%s",
dest.getAbsolutePath())); num++;
} System.out.println(String.format("实际生成目标文件数量:%s,是否和预期数量一致:%s",
num, num.equals(twoLvelFiles.length)));
} private static void copyFileUsingFileStreams(File source, File dest)
throws IOException {
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(source);
output = new FileOutputStream(dest);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
} finally {
input.close();
output.close();
}
}
}

控制台记录过程日志:

一级路径:D:\userOwner\bili\input, 是否存在:true
二级目录总数量:1
二级路径名称:48535790
三级目录总数量是否为1:true,三级路径名称:c_84996945
四级目录总数量是否为3:true,是否存在entry.json文件:true,是否存在16文件夹:true
entry.json文件中获取title:【官方MV】萌托Thomas Rhett新单《Look What God Gave Her》首播
五级目录总数量是否为3:true,是否存在audio.m4s文件:true
拷贝audio.m4s文件到新目录下并完成重命名动作,全新文件地址:D:\userOwner\bili\output\【官方MV】萌托Thomas Rhett新单《Look What God Gave Her》首播.m4s
实际生成目标文件数量:1,是否和预期数量一致:true

【java】【File】用File相关类写一个小工具,完成从指定目录下抽取指定文件并复制到新路径下完成重命名的功能的更多相关文章

  1. 今天突发奇想写了一个小工具,CSDN文章目录生成器

    Why 文章被遗忘 文章检索不好用 方便总结个人知识 What 根据文章分类生成文章目录 莫逸风文章目录 项目地址 gitee(地址)

  2. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

    /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...

  3. java 写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...

  4. Python之小测试:用正则表达式写一个小爬虫用于保存贴吧里的所有图片

    很简单的两步: 1.获取网页源代码 2.利用正则表达式提取出图片地址 3.下载 #!/usr/bin/python #coding=utf8 import re # 正则表达式 import urll ...

  5. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

  6. Windows PE 第一章 熟悉OD(顺便破解一个小工具)

    熟悉OD(顺便破解一个小工具) 上一节了解了OD的简单使用,这次就练习下,目标是破解一款小软件(入门练手用的,没有壳什么的). 首先我们来看一下这个小软件: 我们的目的是输入任何字符串都可以成功注册, ...

  7. 提高Scrum站会效率的一个小工具

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:提高Scrum站会效率的一个小工具.

  8. Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹

    package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public clas ...

  9. 死磕 java同步系列之自己动手写一个锁Lock

    问题 (1)自己动手写一个锁需要哪些知识? (2)自己动手写一个锁到底有多简单? (3)自己能不能写出来一个完美的锁? 简介 本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁. ...

  10. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

随机推荐

  1. Filebeat 调试

    默认情况下,Filebeat将其所有输出发送到syslog. 在前台运行Filebeat时,可以使用-e命令行标志将输出重定向到标准错误. 例如: filebeat -e 默认配置文件是filebea ...

  2. SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测

    转载自:https://cloud.tencent.com/developer/article/1010601 1.背景介绍 我们知道使用 SonarQube 可以在日常开发中检测代码质量,除了使用 ...

  3. 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04

    作者:vivo 互联网服务器团队 本文是<vivo营销自动化技术解密>的第5篇文章,重点分析介绍在营销自动化业务中实时营销场景的背景价值.实时营销引擎架构以及项目开发过程中如何利用动态队列 ...

  4. 微信小程序中视频的显示与隐藏

    在微信小程序中实现视频的播放与暂停 需求: 视频列表中只能有一个视频在播放 点击视频实现播放与暂停功能 加载完成显示图片,点击后变为视频播放 从上次播放的位置进行播放 思路: 定义一个标记变量,控制视 ...

  5. paddle&蜜度 文本智能较对大赛经验分享(17/685)

    引言 我之前参加了一个中文文本智能校对大赛,拿了17名,虽然没什么奖金但好歹也是自己solo拿的第一个比较好的名次吧,期间也学到了一些BERT应用的新视角和新的预训练方法,感觉还挺有趣的,所以在这里记 ...

  6. iframe的简单使用

    看人家写的真的是摸不着头脑.自己写.还是清楚 局部数据的刷新:可以使用ajax.这里只是简单的演示 只作:例子使用.简单演示页面跳转 a标签中target属性和iframe中的name对应.相当于将该 ...

  7. 齐博X1-栏目的终极方法get_sort

    本节说明栏目的最终方法get_sort 我们之前讲的一系列fun函数调用栏目的方法都是基于get_sort这个公共方法而来 我们来看下这个函数的具体参数这个方法有四个参数: id:也就是栏目id,经常 ...

  8. python关于Django搭建简单博客项目(详解一)

    上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...

  9. Charles基本功能

    Windows: 运行安装应用程序以在程序菜单中安装 Charles. Mac OS X: 通过双击解压缩下载文件,然后将 Charles 应用程序复制到 Applications 目录中. Linu ...

  10. Vitepress搭建组件库文档(上)—— 基本配置

    在 vite 出现以前,vuepress 是搭建组件库文档不错的工具,支持以 Markdown 方式编写文档.伴随着 vite 的发展,vitepress 已经到了 1.0.0-alpha.22 版本 ...