File类、递归

File类、递归

1.1File类概述

java.io.File表示文件和目录路径名的抽象类。可以对文件和文件夹进行创建删除、获取、判断、遍历等功能。

1.2路径\文件分割符,相对路径绝度路径

1.2.1路径\文件分割符

* 在编程的过程中,最好不要写死
* windows: 文件分隔符\(编程中要用转义字符"\\") 路径分隔符;
* linux: 文件分隔符/ 路径分隔符:


    public static void main(String[] args) {

        //源码中:public static final String separator = "" + separatorChar;
        //文件分隔符
        String separator = File.separator;
        System.out.println("separator = " + separator);

        //源码中:public static final String pathSeparator = "" + pathSeparatorChar;
        //路径分隔符
        String pathSeparator = File.pathSeparator;
        System.out.println("pathSeparator = " + pathSeparator);

        //执行结果:
        //separator = \
        //pathSeparator = ;

    }

  

 

 1.2.1绝对路径和相对路径

*  绝度路径:从盘符开始的路径,是完成的路径。
*
* 相对路径:化简的路径,以当前项目根目录作为参考,开发中经常使用
* D:\JavaSE\demo02File.txt D:\JavaSE\项目根目录 demo02File.txt相对路径
*
* windows下:文件和目录路径是不区分大小写!!!


    /**
     * 路径知识点
     */
    private static void show01() {
        File file = new File("demo02File.txt");
        System.out.println(file.getAbsoluteFile());

        File file02 = new File("D:\\demo02File.txt");
        System.out.println(file02.getAbsoluteFile());

        //结果:
        // D:\JavaSE\demo02File.txt
        //D:\demo02File.txt
    }

1.3File类的构造方法

*  java.io.File类是文件和目录路径的抽象表示,可以对文件和目录路径进行
* 获取、判断、创建删除、遍历等操作
*
* File对象表示硬盘上真是存在的一个文件或者目录路径名!!!
* 该目录下是否存在文件或者文件夹,不影响File对象的创建!!!
*
* 构造方法:
* 构造方法一:通过文件或目录路径名字符串创建File对象
* public File(String pathname);
* String pathname:字符串的路径名称
* 路径可以是以文件结尾/文件夹结尾,相对路径/绝对路径,存在/不存在
*
* 创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况!!!
*
* 构造方法二:通过父路径名 和 子路径名 创建File对象
* public File(String parent,String child);
*
* 构造方法三:通过抽象父路径和子路径名创建创建File对象
* public File(File parent, String child);
    /**
     * 构造方法
     */
    private static void show02() {
        //构造方法一:通过文件或目录路径名字符串创建File对象
        File file = new File("demo03File.txt");
        System.out.println(file);

        //构造方法二:通过父路径名 和 子路径名 创建File对象
        File file02 = new File("D:\\b","demo03File02.txt");
        System.out.println(file02);

        //D:\\bbb是不存在的文件夹,但是不影响File对象的创建。
        File file03 = new File("D:\\bbb","demo03File02.txt");
        System.out.println(file03);

        //构造方法三:通过抽象父路径和子路径名创建创建File对象
        File parentPath = new File("D:\\");
        File file04 = new File(parentPath, "demo04File02.txt2");
        System.out.println(file04);
    }

1.4File类的获取功能

* File类的获取功能
*
* public String getAbsolutePath();
*
* public String getPath();
* File类重写了toString(),源码如下:
* public String toString() {
* return getPath();
* }
*
* public String getName();
*
* public long length();
* 获取文件的字节长度,文件夹是没有长度的,返回的0!!
    public static void main(String[] args) {
        File file = new File("D:\\JavaSE\\demo04File.txt");


        //获取文件或目录路径名的绝对路径
        File absoluteFile = file.getAbsoluteFile();
        System.out.println("absoluteFile = " + absoluteFile);

        //获取构造方法中参数对应的字符串
        String path = file.getPath();
        System.out.println("path = " + path);
        System.out.println("file = " + file);

        //获取路径结尾的文件名或者文件夹
        String name = file.getName();
        System.out.println("name = " + name);

        //获取文件的字节长度,文件夹是没有长度的,返回的0!!!
        long length = file.length();
        System.out.println("length = " + length);

//        result:
//        absoluteFile = D:\JavaSE\demo04File.txt
//                path = D:\JavaSE\demo04File.txt
//                file = D:\JavaSE\demo04File.txt   File类重写了toString方法,里面调用了getPath()!!!
//                name = demo04File.txt
//        length = 12       utf-8中一个汉字三个字节!!!
    }

1.5File类的判断功能

* File类的判断功能:
*
* public boolean isExists(); File对象表示的文件或者文件夹是否存在
* public boolean isFile(); File对象是文件吗
* public boolean isDirectory(); File对象是文件夹吗
*
* windows中只有文件和文件夹,isFile和sDirectory互斥!!!
* 前提是先判断file是否存在,才有必要在判断是文件还是文件夹!!!
        File file = new File("demo04File.txt");
        //windows中只有文件和文件夹,isFile和sDirectory互斥
        //前提是先判断file是否存在,才有必要在判断是文件还是文件夹
        if (file.exists()){
            System.out.println(file.getName()+"(file or not):"+file.isFile());
            System.out.println(file.getName()+"(directory or not):"+file.isDirectory());
        }

        File file02 = new File("D:\\JavaSE");
        if (file02.exists()){
            System.out.println(file02.getName()+"(file or not):"+file02.isFile());
            System.out.println(file02.getName()+"(directory or not):"+file02.isDirectory());
        }

1.6File类的创建删除功能

* File对象的创建和删除功能:
* public boolean createNewFile();
* 只能创建文件,并且当且仅当文件不存在的时候,创建一个新的文件,返回true,否则返回false
* 需要自己处理异常,file对象表示的目录路径不存在时,抛出异常!!!java.io.IOException
*
* public boolean mkdir();
* 创建单个文件夹,成功返回true,失败返回false(文件夹存在的时候,或者路径不存在)
*
* public boolean mkdirs();
* 创建多级目录,成功返回true,失败返回false(文件夹存在时)
    /**
     * 删除
     */
    private static void show03() {
        File file = new File("D:\\Hello.txt");
        System.out.println(file.delete());      //true 删除成功

        File file1 = new File("D:\\love");
        System.out.println(file1.delete());    //删除失败,只有文件夹是空的,才能删除成功
                                                //构造方法的路径不存在,也会返回false
    }

    /**
     * 创建文件夹
     * 文件夹存在时候,不会再次创建返回false
     * 对于
     * mkdir:参数路径不存在,创建会失败,返回false
     *
     * 其他情况,都能创建文件夹成功,返回true
     */
    private static void show02() {
        File file = new File("D:\\Hello");
        //创建单个文件夹
        System.out.println(file.mkdir());

        File file1 = new File("D:\\love\\tomorrow");
        //创建多个文件夹
        System.out.println(file1.mkdirs());

        //mkdir,mkdirs只能创建文件夹,并且mkirs也可以创建单个文件夹
        File file2 = new File("D:\\Hello.txt");
        System.out.println(file2.mkdirs());
    }

    /**
     * 文件的创建
     * @throws IOException
     */
    private static void show01() throws IOException {

        File file = new File("demo05File.txt");
        boolean newFile = file.createNewFile();

        //第一次运行,没有文件,创建后返回true.第二次运行有文件,不创建,返回false
        System.out.println("newFile create ok ? " + newFile);

        File directoryNoNoNo = new File("iamDirectoryNoNoNo");
        if(!directoryNoNoNo.exists()){
            directoryNoNoNo.createNewFile();
        }
        System.out.println("我仍然是一个文件哦"+directoryNoNoNo.getName());

//        File file = new File("D:\\tt\\demo05File.txt");     //路径不存在,抛出java.io.IOException
//        boolean newFile = file.createNewFile();                     //编译时异常,需要自己处理
    }

  

1.7文件夹的遍历

* File类的遍历目录(文件夹)功能
* public String[] list();
* public File[] listFiles();
*
* 返回目录路径下的所有子文件和文件夹,
* 第一个方法返回的是子文件和文件夹的字符串,封装在String[]数组中
* 第二个方法返回的是子文件和文件夹的File对象,封装在File[]数组中
*
* 如果构造方法中的目录路径不存在,或者是一个文件,那么出现空指针异常
    public static void main(String[] args) {
        //  D:\JavaSE\        08FileAndRecursion
        //File file = new File("D:\\JavaSE\\notExists");  //java.lang.NullPointerException
        File file = new File("D:\\JavaSE\\");     //打印项目目录内容
        String[] list = file.list();

        for (String str :
                list) {
            System.out.println(str);
        }

        System.out.println("------------------------");

        File[] files = file.listFiles();
        for (File dirFile: files ) {
            System.out.println(dirFile.getName());
        }

    }

  

posted @ 2019-03-28 21:39  juna3066  阅读(155)  评论(0编辑  收藏  举报