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类的对 ...
随机推荐
- 关于免费笔记软件Obsidian和免费同步,长文,保存观看
前言 这段可以略过 最早使用的笔记软件(应该说是网页摘录软件)是网文快捕 CyberArticle ,但不停换电脑后当年保存的资料基本都遗失了,那可是我翻阅众多涩涩网站的精华文章. 后来网文快捕推出了 ...
- Android开发重要知识点
一.网络 1.https原理 2.tcp/ip协议 三次握手:https://www.cnblogs.com/cenglinjinran/p/8482412.html 四次挥手:https://www ...
- AI工具推荐——Cherry Studio
Cherry Studio介绍 Cherry Studio是一款支持多模型服务的 Windows/macOS GPT 客户端. 它的主要特点如下: 多样化的大型语言模型提供商支持 ️ 主要的大型语言模 ...
- RPM 与 YUM
RPM 与 YUM rpm 包的管理 rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中.它生成具有.RPM 扩展名的文件.RPM是 RedHat Package Manag ...
- 鸿蒙UI开发快速入门 —— part02: 组件开发
1. 组件基本介绍 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件.在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码 ...
- 常用 NoSQL 比较
Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...
- Argo CD使用CLI工具修改默认密码
查看默认密码 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}&q ...
- java -jar命令运行jar包时指定外部依赖jar包
你们都知道一个java应用项目能够打包成一个jar,固然你必须指定一个拥有main函数的main class做为你这个jar包的程序入口.具体的方法是修改jar包内目录META-INF下的MANIFE ...
- 【转】ReentrantReadWriteLock读写锁详解
https://www.cnblogs.com/xiaoxi/p/9140541.html 一.读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁.在没有写操作的时 ...
- Qt数据库应用7-导出打印QTableWidget/QTableView数据
一.前言 本组件的初衷就是造一个轮子,让数据导入导出用法极致简单,几个行数几行代码搞定它,适用大部分的应用场景,这也是本组件和qtxls最大的区别,qtxls的目标是大而全,提供各种xls的接口,至于 ...