今日份代码:

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONObject;
  3.  
  4. import java.io.*;
  5. import java.nio.charset.StandardCharsets;
  6. import java.nio.file.Files;
  7. import java.nio.file.Paths;
  8. import java.util.List;
  9.  
  10. public class FileTest {
  11.  
  12. public static void main(String[] args) throws IOException {
  13.  
  14. //输出文件目录
  15. String outputPath = "D:\\userOwner\\bili\\output\\";
  16.  
  17. //1.指定一级路径
  18. String path = "D:\\userOwner\\bili\\input";
  19. File oneLevelFile = new File(path);
  20. System.out.println(String.format("一级路径:%s, 是否存在:%s", oneLevelFile.getAbsolutePath(),oneLevelFile.exists()));
  21.  
  22. //2.获取二级路径
  23. File[] twoLvelFiles = oneLevelFile.listFiles();
  24. System.out.println(String.format("二级目录总数量:%s", twoLvelFiles.length));
  25.  
  26. Integer num = 0;
  27. for (File twoLvelFile : twoLvelFiles) {
  28. System.out.println(String.format("二级路径名称:%s", twoLvelFile.getName()));
  29.  
  30. //3.进入三级路径
  31. File[] threeLevelFiles = twoLvelFile.listFiles();
  32. System.out.println(String.format("三级目录总数量是否为1:%s,三级路径名称:%s",
  33. threeLevelFiles.length == 1, threeLevelFiles[0].getName()));
  34. File threeLevelFile = threeLevelFiles[0];
  35.  
  36. //4.进入四级路径
  37. File[] fourLevelFiles = threeLevelFile.listFiles();
  38. System.out.println(String.format("四级目录总数量是否为3:%s,是否存在entry.json文件:%s,是否存在16文件夹:%s",
  39. fourLevelFiles.length == 3, fourLevelFiles[2].getName().equals("entry.json"), fourLevelFiles[0].getName().equals("16")));
  40.  
  41. //5.从entry.json文件获取对应title
  42. String thisFileTitle = "";
  43. File entryJsonFile = fourLevelFiles[2];
  44. List<String> entryJsonStrList = Files.readAllLines(Paths.get(entryJsonFile.getAbsolutePath()), StandardCharsets.UTF_8);
  45. JSONObject jsonObject = JSON.parseObject(entryJsonStrList.get(0));
  46. thisFileTitle = jsonObject.getString("title");
  47. System.out.println(String.format("entry.json文件中获取title:%s", thisFileTitle));
  48.  
  49. //6.从16文件夹中进入五级路径
  50. File[] fiveLevelFiles = fourLevelFiles[0].listFiles();
  51. System.out.println(String.format("五级目录总数量是否为3:%s,是否存在audio.m4s文件:%s",
  52. fiveLevelFiles.length == 3, fiveLevelFiles[0].getName().equals("audio.m4s")));
  53.  
  54. //7.拷贝audio.m4s文件到新目录下并完成重命名动作
  55. File dest = new File(outputPath+thisFileTitle+".m4s");
  56. copyFileUsingFileStreams(fiveLevelFiles[0], dest);
  57. System.out.println(String.format("拷贝audio.m4s文件到新目录下并完成重命名动作,全新文件地址:%s",
  58. dest.getAbsolutePath()));
  59.  
  60. num++;
  61. }
  62.  
  63. System.out.println(String.format("实际生成目标文件数量:%s,是否和预期数量一致:%s",
  64. num, num.equals(twoLvelFiles.length)));
  65. }
  66.  
  67. private static void copyFileUsingFileStreams(File source, File dest)
  68. throws IOException {
  69. InputStream input = null;
  70. OutputStream output = null;
  71. try {
  72. input = new FileInputStream(source);
  73. output = new FileOutputStream(dest);
  74. byte[] buf = new byte[1024];
  75. int bytesRead;
  76. while ((bytesRead = input.read(buf)) > 0) {
  77. output.write(buf, 0, bytesRead);
  78. }
  79. } finally {
  80. input.close();
  81. output.close();
  82. }
  83. }
  84. }

控制台记录过程日志:

  1. 一级路径:D:\userOwner\bili\input, 是否存在:true
  2. 二级目录总数量:1
  3. 二级路径名称:48535790
  4. 三级目录总数量是否为1:true,三级路径名称:c_84996945
  5. 四级目录总数量是否为3:true,是否存在entry.json文件:true,是否存在16文件夹:true
  6. entry.json文件中获取title:【官方MV】萌托Thomas Rhett新单《Look What God Gave Her》首播
  7. 五级目录总数量是否为3:true,是否存在audio.m4s文件:true
  8. 拷贝audio.m4s文件到新目录下并完成重命名动作,全新文件地址:D:\userOwner\bili\output\【官方MV】萌托Thomas Rhett新单《Look What God Gave Her》首播.m4s
  9. 实际生成目标文件数量: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. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  2. PostgreSQL 模式(SCHEMA)

    PostgreSQL 模式(SCHEMA)可以看着是一个表的集合. 一个模式可以包含视图.索引.据类型.函数和操作符等. 相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 ...

  3. H5与APP的交互框架(WebViewJavascriptBridge)

    基本原理是: 把 OC 的方法注册到桥梁中,让 JS 去调用. 把 JS 的方法注册在桥梁中,让 OC 去调用.(注册自己,调用它人.) WebViewJavaScriptBridge 使用的基本步骤 ...

  4. Docker | 容器数据卷详解

    什么是容器数据卷 从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了. 如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化 My ...

  5. Go_Goroutine详解

    Goroutine详解 goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的.Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU ...

  6. 中国制霸生成器「GitHub 热点速览 v.22.42」

    火遍推特的中国制霸生成器本周一开源就占据了两天的 GitHub Trending 榜,不知道你的足迹遍布了多少个省份呢?同样记录痕迹的 kanal 用了内存读写方式解决了 Rust 的消息处理问题,P ...

  7. wpf 手指触摸图片放大缩小 设置放大缩小值

    xaml代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/w ...

  8. VS2022连接Oracle数据库所需包和连接字符串

    VS连接ORACLE数据库 l  VS2022连接ORACLE数据库时,需要引入Oracle.ManagedDataAccess.Core包. l  引入方式:打开VS2022==>项目==&g ...

  9. Python基础部分:11、文件和光标移动

    目录 一.文件操作 1.文件的概念 2.代码打开文件的方式 二.文件读写模式 1.'r' 只读模式 read 2.'w' 只写模式 write 3.'a' 尾部追写模式 add 三.文件操作模式 1. ...

  10. UML建模语言、设计原则、设计模式

    1.UML统一建模语言 定义:用于软件系统设计与分析的语言工具 目的:帮助开发人员更好的梳理逻辑.思路 学习地址:UML概述_w3cschool 官网:https://www.omg.org/spec ...