1.File概述

  File(文件)类可能有一定的误导性,它不仅仅指代的是文件。它既能代表一个特定的文件的名称,又能代表一个目录下的一组文件集的名称,这样就可以用集合List方法调用和遍历。实际上FilePath(文件路径)对这个类来说是一个更好的名字,当然,你会发现还有很多类的命名不是那么简单易懂。与之相关的还有FilenameFilter接口,可以实现接口中的accept(File dir, String name)方法利用后缀(如.java)筛选文件。

2.目录列表器

  如果我们想查看一个目录列表,可以使用File对象的两种方法。我们可以调用list()方法,列出File对象包含的全部列表。同样的可以使用“目标过滤器”筛选符合条件的文件对象。

 public static void main(String[] args) {

       File dir = new File("H:\\workspace\\IO");

       //list中传入过滤器,面向接口,策略设计模式
       String[] names = dir.list(new FilterBySuffix(".java"));
       //String[] names = dir.list();//未使用过滤器
       System.out.println(names);
       for(String name : names){
           System.out.println(name);
       }
}
 /**
  * 根据文件名的后缀过滤文件
  */
 public class FilterBySuffix implements FilenameFilter {

     private String Suffix;//定义后缀方式
     public FilterBySuffix(String suffix) {
         super();
         Suffix = suffix;//构造函数
     }
     /**
      * @param dir 目录
      * @name 被遍历的目录中的文件夹或者文件的名称
      */
     @Override
     public boolean accept(File dir, String name) {
         // TODO Auto-generated method stub
         return name.endsWith(Suffix);//返回后缀符合要求的如.java
     }

 }

  FilterBySuffix 实现 FilenameFilter接口,唯一需要覆盖的方法就是accept(),将其提供给list(),进而筛选文件。这种结构成为“回调”,是一种策略设计模式。因为list()接受FilenameFilter对象作为参数,这就意味着我们可以传递实现接口FilenameFilter的任何对象(本例为FilterBySuffix),这也是面向接口编程的思想。

  accept()方法有两个参数,第一个为File对象的特定目录,以及包含那个文件名的String。list()方法会为目录下的每个文件名调用accept(),返回一个布尔值。当然也可以使用正则化匹配名称。

3.遍历所有目录(包括子目录)

  遍历目录下的所有目录列表需要用到“递归”方法。

 public class GetAllFileTest {

     /**
      * @param args
      */
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         //遍历指定目录下的所有文件,包括子目录
         File dir = new File("H:\\workspace\\IO");
         getAllFiles(dir);
     }

     public static void getAllFiles(File dir) {
         File[] files = dir.listFiles();

         for(File file : files){
             if(file.isDirectory()){
                 //是否为文件夹,如果是文件夹则递归
                 getAllFiles(file);
             }else{
                 System.out.println(file);
             }

         }
     }
 }

  递归算法主要注意的是:必须给定条件,否则不会停止。

3.删除所有目录

  删除目录的思想是:必须从最里层的文件开始删除,否则就可能出现无法删除的情况,同样需要使用递归方法。

 public class DeleteDirFile {

     /**
      * 删除文件夹和里面的文件
      * @param args
      */
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         File dir = new File("H:\\workspace\\IO - 副本");
         deleteDirFile(dir);
     }
     public static void deleteDirFile(File dir){
         File[] files = dir.listFiles();//列出文件和文件夹

         //对文件夹遍历并删除
         for(File file : files){
             if(file.isDirectory()){
                 //如果是文件夹则递归
                 deleteDirFile(file);
             }else{
                 System.out.println(file+":"+file.delete());
             }
         }
         System.out.println(dir+":"+dir.delete());//删除最外层的文件夹
     }

 }

            朱卫恒 2017-12-29  Java I/O系列来自 传智播客课程 和 Java编程思想

Java I/O---File类的更多相关文章

  1. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

  2. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  3. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  4. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  5. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  6. java io包File类

    1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...

  7. Java学习:File类

    Java学习:File类 File类的概述 重点:记住这三个单词 绝对路径和相对路径 File类的构造方法 File类判断功能的方法 File类创建删除功能的方法 File类获取(文件夹)目录和文件夹 ...

  8. 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

    ---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...

  9. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  10. JAVA:IO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

随机推荐

  1. 使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架

    一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是 ...

  2. DES对称加密算法简析

    1 对称加密算法 在了解DES算法前,先加单介绍一下对称加密算法,因为DES属于对称加密算法的一种. 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密 ...

  3. laravel中with()方法,has()方法和whereHas()方法的区别

    with() with()方法是用作"渴求式加载"的,那主要意味着,laravel将会伴随着主要模型预加载出确切的的关联关系.这就对那些如果你想加在一个模型的所有关联关系非常有帮助 ...

  4. Function Programming - First Class(一等公民function)

    引用外界一等公民的定义:"在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值.传参.返回,这样的函数也称之为第一级函数 ...

  5. Activity 的 4 种加载模式

    Activity 的 4 种加载模式 配置 Activity 时可指定 android:launchMode 属性,该属性用于配置该 Activity 的加载模式.该属性支持如下 4 个属性值. * ...

  6. mysql常用的操作

    数据库的常用操作:create database db1; #创建数据库show databases; #查看所有数据库show create database db1;#查看创建的指定数据库alte ...

  7. Nginx如何配置虚拟主机?

    注意,该环境是依赖于http://www.php20.com/forum.php?m ... &extra=page%3D1 基础上进行配置.默认不具备这些文件 .下面是增加一个mytest点 ...

  8. java 后台代码调用接口

    import com.jiuqu.jollykeys.common.util.JsonUtil;import java.io.UnsupportedEncodingException;import j ...

  9. Ubuntu 14.4 Django模型迁移到数据库提示 LookupError: unknown encoding: utf8mb4 解决方法

    由于数据库中需要存储emoji表情,因此需要mysql支持utf8mb4,参考前面的文章升级数据库. 但是由于服务器上面的python-mysqldb连接包版本为1.2.3不支持utf8mb4,因此报 ...

  10. 《3》CentOS7.0+OpenStack+kvm云平台部署—配置Glance

    感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正. 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...