File类

file:文件
directory:文件夹/目录
path:路径

1.File中静态成员变量

separator:系统默认的名称分隔符,Windows用反斜杠\,Linux用正斜杠/
separatorChar: public static final String separator = "" + separatorChar; separator是separatorChar变换过来的

pathSeparator:系统默认的路径分隔符,Windows默认为; Linux默认为:
pathSeparatorChar:public static final String pathSeparator = "" + pathSeparatorChar;

作用:在做项目的时候,操作路径不能写死
c:\develop\a\a.txt Windows下的路径
c:/develop/a/a.txt Linux下的路径

可以这么写,避免不同的操作系统出错:"c:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt "

路径:
绝对路径:完整的路径,以盘符开始的路径(c:,d:)
相对路径:是一个简化的路径,指相对当前项目的根目录 D:\\IDEA\\project\\Test01
如果使用当前项目的根目录,可简化书写
D:\\IDEA\\project\\Test01\\a.txt----》简化为a.txt(可以省略当前项目的根目录)
注意:1.路径是不区分大小写的
2.路径中的文件名称分隔符在Windows中为反斜杠,反斜杠为转义字符,两个反斜杠代表一个反斜杠(路径为string中)
"D:\\IDEA\\project\\Test01"-->正确
"D:\IDEA\project\Test01"-->错误

 

2.File的构造方法
public File(String pathname)
public File(String parent, String child):parent与child只是将pathname拆分成两部分,这样便于路径的利用和转换
public File(File parent, String child) :注意parent为File类型,也相当于一个路径


3.File的获取方法
3.1 public String getAbsolutePath() 方法,
无论创建的文件是用相对路径还是绝对路径,返回结果都是绝对路径

3.2 public String getPath()方法,只返回创建文件对象时的pathname,不区分绝对路径,相对路径*/

3.3 public String getName(),返回文件名或目录名,为创建file对象时pathname的目录分隔符(\\)的最后信息*/

3.4 public long length()--该方法返回的是文件的大小,以字节为单位
注意:1.相应的路径下文件不存在,返回0
           2.如果相应的路径下为目录,返回0

4.File的判断方法
/* public boolean exists() ---判断创建file对象的路径下文件或目录是否存在
文件或目录存在,返回true,否则false
*/

/*
* public boolean isDirectory()---判断创建file对象的路径下是否为目录(文件夹)
文件夹存在,返回true,否则false*/

/*
* public boolean isFile() --判断创建file对象的路径下是否为文件
文件存在,返回true,否则false*/

5.File类中的创建、删除方法
/*public boolean createNewFile() ---当且仅当该目录下的文件不存在时,创建文件
* 文件不存在,文件创建成功,返回true
* 文件存在,创建失败,返回false
* 注意:1.这个方法只用于创建文件,不能创建文件夹
* 2.创建文件的路径必须存在,否则会抛出异常*/


/*public boolean mkdir()--创建单级文件夹,只能创建一级文件夹
* 文件夹不存在,文件夹创建成功,返回true
* 文件夹存在,创建失败,返回false
* public boolean mkdirs()--可以创建多级文件夹,只能创建文件夹
* 任意给一个地址都能创建成功true,再次创建时相同路径文件夹时false
*
* 注意:1.这两个方法只能创建文件夹,不能创建文件
*           2.看是否为文件还是文件夹,看文件类型,不能看文件名称*/


/*public boolean delete()--既可以删除文件,也可以删除目录,且只能删一个,删除成功,返回true
*                                                       当删除目录时,该目录必须为空,才删除成功true,否则false
                                                        当路径不存在,返回false
* 注意:delete是在硬盘上直接删除文件或文件夹,不走回收站,需要谨慎删除*/

5.目录的遍历

/*
* public String[] list()--遍历File对象目录下的子文件和目录,返回一个string数组
* 路径底部必须是目录,如果是文件会出现异常
* 路径不存在,返回false
* 隐藏文件和文件夹也可显示出来*/

/*
* public File[] list()--遍历File对象目录下的子文件和目录,返回一个File数组
* 路径底部必须是目录,如果是文件会出现异常
* 路径不存在,返回false
* 隐藏文件和文件夹也可显示出来*/

package iotest.file;

import java.io.File;
//测试File类下的list(),listFiles()遍历目录方法
public class TestFile06 {
    public static void main(String[] args) {
//        show1();
        show2();
    }
    /*
     * public File[] list()--遍历File对象目录下的子文件和目录,返回一个File数组
     *                         路径底部必须是目录,如果是文件会出现异常
     *                         路径不存在,返回false
     *                         隐藏文件和文件夹也可显示出来*/

    private static void show2() {
        File file = new File("C:\\test\\aaa");
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f);
        }
    }
    /*
    * public String[] list()--遍历File对象目录下的子文件和目录,返回一个string数组
    *                         路径底部必须是目录,如果是文件会出现异常
    *                         路径不存在,返回false
    *                         隐藏文件和文件夹也可显示出来*/

    private static void show1() {
        File file = new File("C:\\test\\aaa");
        String[] list1 = file.list();
        for (String listname : list1) {
            System.out.println(listname);
        }
    }
}

 

6.目录的遍历时,可对文件或目录进行过滤,用过滤器FileFilter或FilenameFilter
public File[] listFiles(FileFilter filter)
public File[] listFiles(FilenameFilter filter)

listFiles()方法做了三件事情:
1.listFiles方法对构造方法中传递的目录进行遍历,对目录中的文件/文件夹--》封装成File对象
2.listFiles会调用参数传递的过滤器中的方法accept
3.listfiles会将遍历得到的每一个File对象,作为参数传递给accept,作为其参数pathname.

FileFilter是一个接口,里面只有一个抽象方法boolean accept(File pathname)
需要自定义过滤器,实现FileFilter接口中accept方法,一般可写成匿名内部类来写过滤器,或lambda表达式
pathname就是listFiles方法传递的每一个File对象


FilenameFilter是一个接口,里面只有一个抽象方法boolean accept(File dir, String name);
需要自定义过滤器,实现FilenameFilter接口中accept方法,一般可写成匿名内部类来写过滤器,或lambda表达式
dir为父目录,name是父目录下一个文件或文件名的名字,可以用public File(String parent, String child)构造方法,创建当前文件的File对象

 

没使用过滤器:

package iotest.file;

import java.io.File;

/*指定文件下的.java文件搜索---指定文件搜索*/
public class TestFile07 {
    public static void main(String[] args) {
             TestFile07.getJavaFile(new File("C:\\test"));
    }
    public static void getJavaFile(File file){
        File[] files = file.listFiles();//遍历目录下的文件或文件夹
        for (File f : files) {
            //判断遍历得到的对象是否为文件夹,是,继续遍历,否开始判断文件格式
            if(f.isDirectory()) {
                getJavaFile(f);
            }else {
              /*  //获取文件名
                String path = f.getPath();
                //忽略大小写
                String s = path.toLowerCase();
                //判断是否以.java 结尾
                boolean b = s.endsWith(".java");
                if(b){
                    System.out.println(f);
                }*/

                //链式编写
                if (f.getPath().toLowerCase().endsWith(".java")){
                    System.out.println(f);
                }

            }
        }
    }
}

使用FileFilter自定义过滤器:

package iotest.file;

import java.io.File;
import java.io.FileFilter;

public class TestFileFilter02 {
    public static void main(String[] args) {
           TestFileFilter.getJavaFile(new File("C:\\test"));
    }
    public static void getJavaFile(File file){
        //用匿名构造器来构造过滤器
        /*File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory()||pathname.getPath().toLowerCase().endsWith(".java");
            }
        });*/
        //使用lambda表达式来优化匿名内部类
        File[] files = file.listFiles((File pathname)->{
            return pathname.isDirectory()||pathname.getPath().toLowerCase().endsWith(".java");
        });
        for (File f : files) {
            if (f.isDirectory()){
                getJavaFile(f);
            }else {
                System.out.println(f);
            }
        }
    }
}

使用FilenameFilter自定义过滤器:

package iotest.file;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class TestFilenameFilter {
    public static void main(String[] args) {
        TestFilenameFilter.getJavaFile(new File("C:\\test"));
    }
    public static void getJavaFile(File dir){
        //用匿名构造器来构造过滤器
        /*File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            //dir为父目录,name是父目录下一个文件或文件名的名字
            public boolean accept(File dir, String name) {
                return new File(dir.getPath(),name).isDirectory()||name.toLowerCase().endsWith(".java");
            }
        });*/
        //使用lambda表达式来优化匿名内部类
        File[] files = dir.listFiles((File d,String name)->{
            return new File(d.getPath(),name).isDirectory()||name.toLowerCase().endsWith(".java");

        });
        for (File f : files) {
            if (f.isDirectory()){
                getJavaFile(f);
            }else {
                System.out.println(f);
            }
        }
    }
}

 

posted @ 2020-07-27 10:29  DannyBoy~  阅读(137)  评论(0编辑  收藏  举报