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类的对 ...
随机推荐
- 痞子衡嵌入式:利用i.MXRT10xx系列内部DCP引擎计算CRC32值时需注意数据对齐
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT10xx系列内部DCP引擎计算CRC32值时需注意数据对齐. MCU 开发里常常需要 CRC 校验来检查数据完整性,CR ...
- 在vue中使用html2canvas生成图片
首先,在vue中引入html2canvas,执行命令 npm install --save html2canvas 然后在需要生成图片的页面中引入 import html2canvas from 'h ...
- Blazor 组件库 BootstrapBlazor 中Button组件介绍
组件介绍 按钮组件,应该是最基础的组件之一了.感觉没什么可介绍的,但是BootstrapBlazor的按钮,还是有很多不错的特性. 首先是最基础的,boostrap5的按钮样式: 代码如下: < ...
- MYSQL8以上修改初始root密码的方法
很遗憾的告诉你,你网上查到的各种改my.enf ,各种update,在新版MYSQL中,统统失效. 解决方法,如下: 1. [root@yisu-5f735cb14d716 ~]# service m ...
- 腾讯云对象存储 COS 荣获对象存储领导力奖!!!
亚太内容分发大会暨 CDN 峰会一直致力于推动 CDN 产业深度融合发展和市场普及,现已成为亚太地区影响力最大的内容分发网络盛会. 十年来,在以腾讯云.阿里云.网宿科技等亚太 CDN 产业联盟成员孜孜 ...
- GraphQL Part II: 中间件
GraphQL Part II: 中间件 如果您熟悉 ASP.NET Core 的中间件,您可能注意到在我们上一篇博客中我们已经拥有了一个中间件.在初始的空白应用中,中间件的职责是返回 hello W ...
- 在TOMCAT8.5使用 JOSSO 单点登录(Agent 端)
网上找到的玩法都是用 josso 给的命令行工具加工 tomcat,这个办法有不少问题: 1. tomcat8.5 还不支持 2. 很难配置,这让我险些放弃 tomcat8.5,用 tomcat8,但 ...
- 解决httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for Se ...
- 组件漏洞测试工具---Dependency-Check
目录 文章综述 Dependency-Check简介 工作原理 常用命令 报告解读 使用场景 缺点 文章综述 本文主要介绍Dependency-Check工具的工作原理和使用方法,并提供一个开源方案帮 ...
- 【转载】 一次生产环境的NOHTTPRESPONSEEXCEPTION异常的排查记录
https://www.freesion.com/article/41531004212/ 环境: jdk1.8+tomcat8+httpclient4.5.2 主要现象: 项目偶发出现org.apa ...