高级API之file类的使用(下)

简介: 高级API之file类的使用(下)

创建和删除目录


File 类除了对文件的创建和删除外,还可以创建和删除目录。创建目录需要调用 mkdir() 方法,删除目录需要调用 delete() 方法。无论是创建还是删除目录都可以调用 exists() 方法判断目录是否存在。


例 3

编写一个程序判断 C 盘根目录下是否存在 config 目录,如果存在则先删除再创建。实现代码如下:

       public 
       class 
       Test04 {
       public 
       static 
       void 
       main
       (String[] args) {
       String 
       path 
       = 
       "C:/config/"; 
       // 指定目录位置
       File 
       f 
       = 
       new 
       File(path); 
       // 创建File对象
       if (f.exists()) {
                   f.delete();
               }
               f.mkdir(); 
       // 创建目录
           }
       }


遍历目录

通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表。File 类的 list() 方法提供了遍历目录功能,该方法有如下两种重载形式。


1. String[] list()

该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null。


提示:list() 方法返回的数组中仅包含文件名称,而不包含路径。但不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。

       public 
       class 
       Test05 {
       public 
       static 
       void 
       main
       (String[] args) {
       File 
       f 
       = 
       new 
       File(
       "C:/"); 
       // 建立File变量,并设定由f变量变数引用
               System.out.println(
       "文件名称\t\t文件类型\t\t文件大小");
               System.out.println(
       "===================================================");
               String fileList[] = f.list(); 
       // 调用不带参数的list()方法
       for (
       int 
       i 
       = 
       0; i < fileList.length; i++) { 
       // 遍历返回的字符数组
                   System.out.print(fileList[i] + 
       "\t\t");
                   System.out.print((
       new 
       File(
       "C:/", fileList[i])).isFile() ? 
       "文件" + 
       "\t\t" : 
       "文件夹" + 
       "\t\t");
                   System.out.println((
       new 
       File(
       "C:/", fileList[i])).length() + 
       "字节");
               }
           }
       }


由于 list() 方法返回的字符数组中仅包含文件名称,因此为了获取文件类型和大小,必须先转换为 File 对象再调用其方法。如下所示的是实例的运行效果:

文件名称  文件类型  文件大小

===================================================

$Recycle.Bin  文件夹  4096字节

Documents and Settings  文件夹  0字节

Download  文件夹  0字节

DRIVERS  文件夹  0字节

FibocomLog  文件夹  0字节

Gateface  文件夹  0字节

GFPageCache  文件夹  0字节

hiberfil.sys  文件  3375026176字节

Intel  文件夹  0字节

KuGou  文件夹  0字节

logs  文件夹  0字节

msdia80.dll  文件  904704字节

MSOCache  文件夹  0字节

MyDownloads  文件夹  0字节

MyDrivers  文件夹  0字节

news.template  文件  417字节

NVIDIA  文件夹  0字节

OneDriveTemp  文件夹  0字节

opt  文件夹  0字节

pagefile.sys  文件  6442450944字节

PerfLogs  文件夹  0字节

Program Files  文件夹  12288字节

Program Files (x86)  文件夹  8192字节

ProgramData  文件夹  12288字节

QMDownload  文件夹  0字节

Recovery  文件夹  0字节

swapfile.sys  文件  268435456字节

System Volume Information  文件夹  12288字节

Users  文件夹  4096字节

Windows  文件夹  16384字节


2. String[] list(FilenameFilter filter)

该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter 过滤器的文件和目录,如果 filter 为 null,则接受所有名称。


例 5

假设希望只列出目录下的某些文件,这就需要调用带过滤器参数的 list() 方法。首先需要创建文件过滤器,该过滤器必须实现 java.io.FilenameFilter 接口,并在 accept() 方法中指定允许的文件类型。


如下所示为允许 SYS、TXT 和 BAK 格式文件的过滤器实现代码:

       public 
       class 
       ImageFilter 
       implements 
       FilenameFilter {
       // 实现 FilenameFilter 接口
       @Override
       public 
       boolean 
       accept
       (File dir, String name) {
       // 指定允许的文件类型
       return name.endsWith(
       ".sys") || name.endsWith(
       ".txt") || name.endsWith(
       ".bak");
           }
       }


上述代码创建的过滤器名称为 ImageFilter,接下来只需要将该名称传递给 list() 方法即可实现筛选文件。如下所示为修改后的 list() 方法,其他代码与list()遍历代码相同,这里不再重复。


String fileList[] = f.list(new ImageFilter());


运行结果

文件名称        文件类型        文件大小

===================================================

offline_FtnInfo.txt        文件        296字节

pagefile.sys        文件        8436592640字节

目录
相关文章
|
16天前
|
API 索引
String类下常用API
String类下常用API
31 1
|
9天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
32 0
|
1天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
1月前
|
Java 索引
|
1月前
|
Java API
|
3月前
|
监控 Shell API
了解asyncio高级api索引
【6月更文挑战第27天】本文是`asyncio` 高级API概览:运行异步任务如`run()`, `create_task()`;等待机制如`gather()`, `wait_for()`, `shield()`;任务管理如`current_task()`, `all_tasks()`;队列和子进程功能;同步原语包括锁、事件和信号量。示例中涉及`sleep()`, `gather()`, `wait_for()`, 子进程创建及同步异常`TimeoutError`和`CancelledError`。查阅官方文档以获取详细信息和示例代码。
25 1
了解asyncio高级api索引
|
2月前
|
Java 测试技术 API
Java详解 : API常用类
Java详解 : API常用类
|
3月前
|
Java API 索引
java中String类常用API
java中String类常用API
|
3月前
|
存储 Java API
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
33 2
|
3月前
|
存储 Java API
JavaSE——常用API进阶二(4/8)-秒杀案例(需求与分析、代码与运行结果)、Calendar(Calendar日历类的常见方法、用法示例)
JavaSE——常用API进阶二(4/8)-秒杀案例(需求与分析、代码与运行结果)、Calendar(Calendar日历类的常见方法、用法示例)
38 1
下一篇
DDNS