0415-File类和FileFilter接口
package demoFile; import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
/*
java.io.file类是文件和目录路径名的抽象表示,主要用于文件和目录的新建、修改和删除。
静态构造方法:
public(String pathname):通过给定的路径字符串转换为抽象路径来创建新的File实例
public(String parent,String child):从父路径字符串和子路径字符串创建File实例
public(File parent,String child):从抽象路径和子路径字符串创建新的File实例
2、File类的静态成员变量
static String pathSeparator:与系统有关的路径分隔符,他表示为一个字符串
static char pathSeparatorChar:与系统有关的路径分隔符
static String separator:与系统有关的默认名称分隔符,他表示为一个字符
static char separatorChar:与系统有关的默认名称分隔符。
*/
public class Demo01File {
static int countFile = 0, countDir = 0; public static void main(String[] args) {
//文件或者路径可以是有效的,也可以是无效的
File file = new File("D:\\JAVA学习\\demo\\英语单词.txt");
System.out.println(file.pathSeparator); //路径分隔符windows是分号;,linux是冒号:
System.out.println(file.pathSeparatorChar);
System.out.println(file.separator); //文件名称分隔符windows是反斜杠\,linux是正斜杠/
System.out.println(file.separatorChar);
getMethod();
createFile();
listFile(new File("D:\\新天地"));
System.out.println("文件个数:" + countFile);
System.out.println("目录个数:" + countDir);
System.out.println("----------其中:pdf文件有----------");
// listPdfFile(new File("D:\\新天地"));
// listPdfFileInnerClass(new File("D:\\新天地"));
// listPdfFileInnerClass2(new File("D:\\新天地"));
listPdfFileLambda(new File("D:\\新天地"));
} /*
获取方法
public String getAbsolutePath():返回此File的绝对路径名字符串。
public String getPath():将此File转换为路径名字符串。
public String getName():返回由此File表示的文件或目录名称。
public long length():返回由此File表示的文件的长度。
*/
public static void getMethod() {
// 如果File创建参数使用了绝对路径则getPath返回的也是绝对路径
File fl = new File("JAVA学习笔记_File类和IO流.docx");
System.out.println(fl.getAbsolutePath());//返回绝对路径 D:\JAVA学习\demo\JAVA学习笔记_File类和IO流.docx
System.out.println(fl.getPath());//返回相对路径 JAVA学习笔记_File类和IO流.docx
System.out.println(fl.getName());//返回文件名 JAVA学习笔记_File类和IO流.docx
System.out.println(fl.length()); //返回文件大小字节数,无文件返回0
}
/*
判断方法
public Boolean exists():判断文件或目录是否存在
public Boolean isDirectory():判断是否为目录
public Boolean isFile():判断是否为文件
创建和删除方法
public Boolean createNewFile():仅当具有该名称的文件不存在时,创建一个新的空文件
public Boolean delete():删除由此File表示的目录或文件
public Boolean mkdir():创建有此File表示的文件目录
public Boolean mkdirs():创建有此File表示的目录,包括任何必需不存在的父目录
*/
public static void createFile() {
String path = (new File("")).getAbsolutePath();
File f = new File(path, "myDir");
if (!f.exists()) {
f.mkdirs();
} else {
System.out.println("目录已存在。");
}
f = new File(f, "我爱你中国.txt");
try {
f.createNewFile();
} catch (IOException e) {
System.out.println(e);
}
f.delete();
}
/*
File类的遍历方法
public String[] list() 返回一个String数组,表示该File类中所有的子文件和目录
public File[] listFiles() 返回一个File数组,表示该File类中所有的子文件和目录
*/
//使用递归罗列目录中存在的所有子目录和文件
public static void listFile(File f) {
System.out.println(f);
File[] lf = f.listFiles();
for (File file : lf) {
if (file.isDirectory()) {
countDir++;
listFile(file);
} else {
System.out.println(file);
countFile++;
}
}
} //通过过滤器仅返回目录和pdf文档
public static void listPdfFile(File dir) { File[] fl = dir.listFiles(new Demo03FileFilterImpl());
for (File file : fl) {
if (file.isDirectory()) {
listPdfFile(file);
} else {
System.out.println(file);
}
} } //使用匿名内部类:通过过滤器仅返回目录和pdf文档
public static void listPdfFileInnerClass(File dir) {
File[] fl = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory()
|| pathname.toString().toLowerCase().endsWith(".pdf");
}
});
for (File file : fl) {
if (file.isDirectory()) {
listPdfFile(file);
} else {
System.out.println(file);
}
}
} //使用匿名内部类:文件过滤器的另一个接口类型FilenameFilter
public static void listPdfFileInnerClass2(File dir) {
File[] fl = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// 参数:dir为遍历的源目录,name为里面的子目录和文件
return new File(dir, name).isDirectory() || name.toString().toLowerCase().endsWith(".pdf");
}
});
for (File file : fl) {
if (file.isDirectory()) {
listPdfFile(file);
} else {
System.out.println(file);
}
} } //使用lambda表达式(匿名内部类优化写法):通过过滤器仅返回目录和pdf文档
public static void listPdfFileLambda(File dir) {
//匿名内部类接口只有一个抽象方法的时候,就可以使用lambda表达式来简化
File[] fl = dir.listFiles((File pathname) -> {
return pathname.isDirectory()
|| pathname.toString().toLowerCase().endsWith(".pdf");
});
for (File file : fl) {
if (file.isDirectory()) {
listPdfFile(file);
} else {
System.out.println(file);
}
} } }
-------FileFilter接口实现类------
package demoFile; import java.io.File;
import java.io.FileFilter; /*
文件过滤器:在File类中有两个重载了listFiles的方法,方法参数传递就是过滤器
java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。
作用:用来过滤文件(File对象)
抽象方法:boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
java.io.FilenameFilter接口:实现此接口的实现类可以用于过滤文件名。
作用:用于过虑文件名
抽象方法:boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义顾虑的规则。
*/
public class Demo03FileFilterImpl implements FileFilter {
/*
* 过滤规则:如果文件是以.pdf结尾的就返回true,否则返回false
* 如果传入的是一个文件夹,也要返回true保证调用函数可以继续遍历
* */
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()){
return true;
}
return pathname.toString().toLowerCase().endsWith(".pdf");
}
}
0415-File类和FileFilter接口的更多相关文章
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...
- File类----> FileFilter接口:实现方法
1创建一个类 继承 FileFilter接口 在类中重写boolean accept方法 写出要实现的条件2在main方法中创建File对象 代表了D盘File file = new File(&qu ...
- Java学习:File类中的过滤器接口
javaIO类的File类应用:过滤器接口 FilenameFilter和FileFilter都是用来过滤文件的 例如: 过滤以.jpg或者.java结尾的文件. 通过看他们的源码: 通过使用File ...
- 详谈JAVA中的file类与IO流
File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...
- java IO(一):File类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- javaIO流(一)--File类的基本使用
一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...
- 【转】File类应用 - FilenameFilter 和 FileFilter
FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...
- JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)
1.流的简述及演示案例输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出.字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表. ...
- [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法
前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批 ...
- I/O流——File类及使用
I/O框架介绍 I/O是计算机输入/输出的接口.Java的核心库java.io提供了全方面的I/O接口,包括:文件系统的操作,文件读写,标准设备的输出等. File类及使用 ① 一个File类的对 ...
随机推荐
- Linux中vim快捷键+vim报错解决
vim快捷键+vim报错解决 vim 快捷键 编辑器 yum -y install vim 快捷键: 视图模式: 0 Home ^ 快速移动光标到行首 $ End 快速移动光标到行尾 u 撤销 ...
- element ui table+分页 筛选全部数据
1. @filter-change 要写在table根元素,也就是<el-table @filter-change="filterChange"></el-tab ...
- ibatis源码分析
背景:调试模式下,单步运行一个查询订单协议操作,记录了ibatis框架的执行动作,侧面剖析其原理. 一.简介: 1. dal 层的dao接口实现类通常会继承SqlMapClientDaoSupport ...
- Elasticsearch之性能优化
elasticsearch 使用有时候会出现CPU飙升,内存爆满情况,需要进行一些优化设置. 1. 一定要用es自带id生产策略 2. 设置副本数量为0,写入完可恢复 put localhost: ...
- juc 学习
CyclicBarrier 应用场景是比如在做压力测试时,使用多少个用户并发,做集合点测试. 比如设置 100个用户并发,100个用户同时进行压测,只有100个用户压测完毕时,才能再发起下一波的压力测 ...
- SpringCloudStream极简教程
简介 Spring Cloud Stream 是一个轻量级消息驱动微服务框架,旨在简化与消息中间件(如 Kafka.RabbitMQ 等)的集成,支持消息的发布和订阅模式.它提供了一种基于 Sprin ...
- 攻防世界:Crypto习题之easy_RSA
攻防世界:Crypto习题之easy_RSA RSA 加密 在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性.而其中最著名的算法便是 RSA ...
- GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘
GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘 本文尝试以 GPU 漏洞为引介绍围绕 GPU 驱动这一攻击面,安全研究人员对内核漏洞利用技术做的一些探索. 背景介绍 目前移动 SOC 平台上由多个硬件模 ...
- Python 潮流周刊#81:在个人电脑上运行 GPT-4 级别的大模型(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- tomcat部署cas6并配置自己的ssl证书
配置并安装tomcat,详见我的文章:windows安装tomcat10 安装必备的软件:(在<windows安装tomcat10>中已详细配置) apache-tomcat-10.1. ...