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接口的更多相关文章

  1. java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

    FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...

  2. File类----> FileFilter接口:实现方法

    1创建一个类 继承 FileFilter接口 在类中重写boolean accept方法 写出要实现的条件2在main方法中创建File对象 代表了D盘File file = new File(&qu ...

  3. Java学习:File类中的过滤器接口

    javaIO类的File类应用:过滤器接口 FilenameFilter和FileFilter都是用来过滤文件的 例如: 过滤以.jpg或者.java结尾的文件. 通过看他们的源码: 通过使用File ...

  4. 详谈JAVA中的file类与IO流

    File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...

  5. java IO(一):File类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  6. javaIO流(一)--File类的基本使用

    一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...

  7. 【转】File类应用 - FilenameFilter 和 FileFilter

    FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...

  8. JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)

    1.流的简述及演示案例输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出.字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表. ...

  9. [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法

    前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批 ...

  10. I/O流——File类及使用

    I/O框架介绍 I/O是计算机输入/输出的接口.Java的核心库java.io提供了全方面的I/O接口,包括:文件系统的操作,文件读写,标准设备的输出等. File类及使用 ①   一个File类的对 ...

随机推荐

  1. 接口测试中如何保持session鉴权/会话

    当接口使用token鉴权时,可以直接在响应数据中提取token的值,关联到其他接口使用 如果接口使用的是session鉴权,可以使用session=resquests.Session()方法,创建一个 ...

  2. importlib 用法

    首先看一下importlib.import_module(name, package=None)函数的参数 函数调用存在两种方式: 1.绝对导入,name为完整路径str,package为None. ...

  3. Postgresql之基础

    Postgresql:  https://www.postgresql.org/ [安装] 删除已经存在的pg: yum remove -y postgresql* && rm -rf ...

  4. 简述GoLang优势与生态

    开门见山,一睹golang的风采 性能优势 部署运维成本低 编码格式统一:测试简单 1. 性能优势 Go 语言被称为是:"21世纪的C语言",虽然这个帽子戴的有点高,不妨这里给大家 ...

  5. nginx相关服务实践

    1. 实现客户端IP地址获取接口 普通版本 Nginx 的配置文件中提供了一个变量 $remote_addr 用来获取用户访问本实例时的 IP 地址,我们只要将这个变量的值返回给用户就行了(没错,就是 ...

  6. vue3 封装api接口

    新建axiosj.ts import axios from 'axios'; import { showMessage } from "./status"; // 引入状态码文件 ...

  7. MongoDB备份脚本

    #!/bin/bash #backup MongoDB #mongodump命令路径 DUMP=/home/mongodb/bin/mongodump #临时备份目录 OUT_DIR=/home/mo ...

  8. java.time 的纪年方式

    Date date = new Date(); Instant instant = date.toInstant(); Chronology chronology = HijrahChronology ...

  9. 【UI框架】ANtDesignVue中的Content超过一页显示问题

    假设content部分是绿色 当内容超出一页之后,滑下去,后面的都没有底色. 如果footer有内容,content的内容甚至会和footer内容重叠在一起,同时,footer的内容随着下滑,位置就不 ...

  10. Debian关闭防火墙命令详解

    防火墙是保护计算机系统安全的关键组件.在一些情况下,需要关闭防火墙,以允许特定的应用程序或服务访问网络.在Debian系统中关闭防火墙的方法多种多样,本文将从多个方面对Debian关闭防火墙命令进行详 ...