【Java SE进阶】Day08 File类、递归
一、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类、递归的更多相关文章
- Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public clas ...
- 【Java SE】Day08 String类、static关键字、Arrays类、Math类
一.String类 1.概述 所有双引号字符串,都是String类的对象 字符串常量,会存在字符串常量池中 2.创建 构造函数--空构造.字符数组.字节(byte ASCII码)数组 3.常用方法-- ...
- day23<File类递归练习>
File类递归练习(统计该文件夹大小) File类递归练习(删除该文件夹) File类递归练习(拷贝) File类递归练习(按层级打印) 递归练习(斐波那契数列) 递归练习(1000的阶乘所有零和尾部 ...
- java之io之file类的常用操作
java io 中,file类是必须掌握的.它的常用api用法见实例. package com.westward.io; import java.io.File; import java.io.IOE ...
- Java SE 之 数据库操作工具类(DBUtil)设计
JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...
- Java IO体系之File类浅析
Java IO体系之File类浅析 一.File类介绍 位于java.io下的Java File类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等.File对 ...
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...
- Java的IO操作---File类
目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...
- 黑马程序员-File类+递归的简单应用
Java File类 Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目 ...
随机推荐
- MySQL 的七种日志总结
文章转载自:https://mp.weixin.qq.com/s/ewv7HskHvH3O7kFyOmoqgw 一.MySQL 日志分类 日志类别 说明 备注 错误日志 错误日志记录了当MySQL启动 ...
- Keepalived设置master故障恢复后不重新抢回VIP
(1).master配置 ! Configuration File for keepalived global_defs { router_id lb01 } vrrp_script check_ng ...
- Docker容器获取宿主机信息
最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...
- C++实现双向RRT算法
C++实现双向RRT算法 背景介绍 RRT(Rapidly-exploring Random Trees)是Steven M. LaValle和James J. Kuffner Jr.提出的一种通过所 ...
- Python实现改进后的Bi-RRT算法实例
Python实现改进后的Bi-RRT算法实例 1.背景说明 以下代码是参照上海交通大学海洋工程国家重点实验室<基于改进双向RRT的无人艇局部路径规划算法研究>的算法思想实现的. 2.算法流 ...
- 最长公共前缀(Java)
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:strs = ["flower","flo ...
- capability参数配置
前言 本文为在霍格沃兹测试开发学社的学习经历分享 简介 功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序 形式:键值对的集合,键对应设置的名称,值对应设置的值 主要 ...
- postman一些你不常用的实用技巧,竟然还能这么玩
序言 各位好啊,我是会编程的蜗牛,作为java开发者,平时调试接口的时候,肯定需要用到接口调试工具,或者Swagger之类的.Swagger的优势在于它可以将后台加的一些接口注释信息直接展示出来,但是 ...
- 【ps下载与安装】Adobe Photoshop 2022 for Mac v23.5 中文永久版下载 Ps图像编辑软件
Adobe Photoshop 2022 mac破解版,是一款Ps图像编辑软件,同时支持M1/M2芯片和Intel芯片安装,此主要的更新包括多个新增和改进的功能,例如改进的对象选择工具,其悬停功能可预 ...
- 3.Task对象
Task对象 用于调度或并发协程对象 在事件循环中可以添加多个任务 创建task对象三种方式 创建task对象可以让协程加入事件循环中等待被调度执行 3.7版本之后加入asyncio.create ...