一、File类

1、概述java.io.File

  • 文件和路径的抽象表示
  • 用于文件和目录的创建、查找和删除等
  • 分类
    • file--文件
    • directory--文件夹/目录
    • path--路径

2、静态成员变量

  • pathSeparator/pathSeparatorChar:路径分隔符(;)
  • separator/separatorChar:名称分隔符
    • Linux:/
    • Windows:\

3、绝对路径和相对路径

  • 相对:相对于项目的根目录
  • 路径不区分大小写,(Java语言中)双反斜杠表示转义字符

4、构造方法

  • File(File parent, String child)
  • File(String parent, String child)
  • File(String pathname) 
  • File(URI uri) 

5、获取方法

  • getAbsolutePath() :绝对路径
  • getPath():转换为路径字符串
  • getName():返回文件和目录名
  • length():返回文件长度

6、判断方法

  • exists()
  • isDirectory():目录
  • isFile()

7、增删方法

  • createNewFile() :若不存在,则创建
  • delete()
  • mkdir():创建单级目录
  • mkdirs()

8、遍历功能

  • list():返回子文件和目录
  • listFiles():返回带路径的子文件和目录

二、递归

1、概述

  • 直接递归
  • 间接递归
  • 注意:次数不宜过多,否则会产生栈内存溢出

2、打印多级目录

public static void getAllFile(File dir){
//递归打印目录
System.out.println(dir);
File[] files=dir.listFiles();
for (File f:files) {
if(f.isDirectory()){
getAllFile(f);
}
else{
System.out.println(f);
}
}
}

三、综合案例

1、文件搜索:搜索D:\aaa目录中的java文件

    public static void getAllFile(File dir){
//递归打印目录
//不输出目录
// System.out.println(dir);
File[] files=dir.listFiles();
for (File f:files) {
if(f.isDirectory()){
getAllFile(f);
}
else{
//只要.java文件
//使用endwith()
//1.把file对象f转换为字符串对象【f.getName()】
String name = f.getName();//获取文件名称
String path = f.getPath();//比较全的文件路径【绝对路径】
String s = f.toString();
//如果是大写,转换为小写
s.toLowerCase();//字符串转换为小写
//2.调用String类中的方法endsWith()判断是否以.java结尾
boolean b = s.endsWith(".pdf");
//如果为真,则输出
if (b) {
System.out.println(f);
}
//用一行链式编程实现
if(f.getName().toLowerCase().endsWith(".pdf")){
System.out.println("-------------------------------------------");
}
}
}

2、文件过滤器优化

  • listFiles():返回路径中的文件
  • listFiles(FileFilter filter) :返回满足过滤条件(实现类重写accept方法)的文件和目录
  • listFiles(FilenameFilter filter) :类的accept方法有两个参数(路径 +文件名)

3、FileNameFilter过滤器的使用和Lambda优化

public class Demo06FilterBianliFile2 {
public static void main(String[] args) {
File file=new File("E:\\Java");
//打印多级目录
getAllFile(file);
}
public static void getAllFile(File dir){
//递归打印目录
//传递一个过滤器对象
File[] files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".pdf"));
//使用Lambda表达式优化匿名内部类(函数式接口可以使用)
// File[] files=dir.listFiles((d,name)-> new File(d,name)||name.getName().toLowerCase().endsWith(".pdf"));
for (File f:files) {
if(f.isDirectory()){
getAllFile(f);
}
else{
System.out.println(f);
}
}
}
}

【Java SE进阶】Day08 File类、递归的更多相关文章

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

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

  2. 【Java SE】Day08 String类、static关键字、Arrays类、Math类

    一.String类 1.概述 所有双引号字符串,都是String类的对象 字符串常量,会存在字符串常量池中 2.创建 构造函数--空构造.字符数组.字节(byte ASCII码)数组 3.常用方法-- ...

  3. day23<File类递归练习>

    File类递归练习(统计该文件夹大小) File类递归练习(删除该文件夹) File类递归练习(拷贝) File类递归练习(按层级打印) 递归练习(斐波那契数列) 递归练习(1000的阶乘所有零和尾部 ...

  4. java之io之file类的常用操作

    java io 中,file类是必须掌握的.它的常用api用法见实例. package com.westward.io; import java.io.File; import java.io.IOE ...

  5. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  6. Java IO体系之File类浅析

    Java IO体系之File类浅析 一.File类介绍 位于java.io下的Java File类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等.File对 ...

  7. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte

    File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...

  8. Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

  9. 黑马程序员-File类+递归的简单应用

    Java File类   Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目 ...

随机推荐

  1. Django ORM 实现数据的多表 增删改查

    一.创建模型和表 假定下面这些概念.字段与关系: 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,手机号,家庭住址信息. 作者详情模型 和 作者模型之间是一对一的关系(one- ...

  2. 使用 EFKLK 搭建 Kubernetes 日志收集工具栈

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247491992&idx=1&sn=a770252759 ...

  3. 220726 T1 树染色问题 (树的直径)

    题目描述 高钧在校园中漫步时,经过了一棵树.这时,几个同学突然冒出来控制住了他. 这棵树有 nn 个节点, 每个节点有黑白两种颜色, 为了更好的 alb , 需要把所有节点染成同一种颜色. 为了更好的 ...

  4. Linux Block模块之IO合并代码解析

    1 IO路径 从内核角度看,进程产生的IO路径主要有三条: 缓存IO:系统绝大部分IO走的这种形式,充分利用文件系统层的page cache所带来的优势.应用程序产生的IO经系统调用落入page ca ...

  5. 知识图谱顶会论文(ACL-2022) ACL-SimKGC:基于PLM的简单对比KGC

    12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 摘要 1.引言 2.相关工作 2.1 知识图补全 ...

  6. 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

    ​ 参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...

  7. SQL Server-表结构的操作

    1.修改表的字段的数据类型 alter table [File_Info] alter column Upload_Request_ID nvarchar(14) not null 2.添加表的字段并 ...

  8. Linux的挖矿木马病毒清除(kswapd0进程)

    1.top查看资源使用情况 看到这些进程一直在变化,但是,主要是由于kswapd0进程在作怪,占据了99%以上的CUP,查找资料后,发现它就是挖矿进程 2.排查kswapd0进程 执行命令netsta ...

  9. Pandas常用方法

    数据处理很多需要用到pandas,有两个基本类型:Series表示一维数据,DataFrame表示多维.以下是一些常用方法的整理: pandas.Series 创建 Series pandas.Ser ...

  10. Java函数式编程:二、高阶函数,闭包,函数组合以及柯里化

    承接上文:Java函数式编程:一.函数式接口,lambda表达式和方法引用 这次来聊聊函数式编程中其他的几个比较重要的概念和技术,从而使得我们能更深刻的掌握Java中的函数式编程. 本篇博客主要聊聊以 ...