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类的对 ...
随机推荐
- VS中使用Qt方法详解
相信大家都知道在 Qt Creator 中可以使用 MSVC 编译工具对 Qt 项目进行编译.若有人比较习惯于使用 Visual Studio,或某些项目必须使用 Visual Studio,也可以在 ...
- python爬虫 正则表达式详解
正则表达式 最近学校布置了一个关于python爬虫的期末作业,而我之前对python爬虫一直都比较感兴趣但是没有系统的学过,就想借此机会开个新坑来系统学习和应用python爬虫,那我们开始吧 正则表达 ...
- Xdebug+Phpstorm远程调试
开发环境: 本地 Windows10 日常开发使用的环境 装有PHPStorm 远程主机 Linux 服务器 装php-fpm/nginx等所有开发依赖环境 本地可以访问远程主机 但远程主机无法访问本 ...
- pycharm之远程开发
转载:https://amos-x.com/index.php/amos/archives/pycharm-remote/ 前言 远程开发什么意思? 远程开发就是用本地的个人电脑进行代码编写开发,但是 ...
- Codeforces Round 855 (Div
Problem - E2 - Unforgivable Curse (hard version) 给定一个初始字符串s和目标字符串t,我们可以对字符串s进行以下任意次操作: 对于位置\(i\),如果\ ...
- docker环境一个奇怪的问题,容器进程正常运行,但是docker ps -a却找不到容器,也找不到镜像
一: 问题: docker环境一个奇怪的问题,使用容器跑的进程正常提供服务,在服务器上也能看到对应的端口正在监听,但是docker ps -a却找不到容器,也找不到镜像. 查看我使用docker容器启 ...
- flutter安装过程中 flutter doctor 出现错误 cmdline-tools component is missing
进入Android studio的settings添加tool工具
- android emulator 设置代理
android emulator 设置代理 由于开发的 app 需要访问 google 服务,那么跑虚拟机的时候就需要设置网络代理,试了几种方法都没成功,记录一下 因为已知我开发电脑的代理地址和端口, ...
- Flutter showModalBottomSheet改变高度
showModalBottomSheet改变高度 将isScrollControlled设置为true,此时弹窗会全屏展示,再返回一个带高度的SizedBox,就可以指定弹窗的高度了 showModa ...
- CentOS 集群初始化设置
0. 前置操作 centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 下载CentOS-7-x86_64-DVD-2009.iso即可 1. 配置静态网络 1.1 查看 ...