Java SE-IO操作一

文件分隔符
File对象的创建
文件路径获取
文件夹的创建
文件以及文件夹的遍历
文件过滤器

文件分隔符
  • 在windows中\代表文件分隔符
  • 在lunix中/代表文件分隔符
  • 路径名称不区分的大小写
  • 一般不降分隔符写死了
import java.io.File;

public class Demo01File {
    /**
     *   路径名称不区分的大小写
     *      在windows中\代表分隔符,要以转义字符行式体现即\\
     *
     * */
    public static void main(String[] args) {
        //路径分隔符;
        String path = File.pathSeparator;
        System.out.println(path);

        //文件名称分隔符
        /**
         *  windows:  \
         *  lunix:  /
         *    注意:在文件操作时分割符不要写死了
         * */
        String seperator = File.separator;
        System.out.println(seperator);
    }
}

文件对象创建(四种)
  • 创建File类对象时,文件路径可以不存在,可以以文件夹或文件结尾
import java.io.File;

public class Demo02File {
    /**
     *  创建File类对象时:
     *     文件路径可以不存在
     *     可以以文件夹或文件结尾
     *
     * */
    public static void demo01() {
        File file = new File("D:\\d\\a.txt");
        System.out.println(file);
    }

    public static void demo02(String parent, String child) {
        File file = new File(parent, child);
        System.out.println(file);
    }

    public static void demo03() {
        File parent = new File("D:\\");
        File file = new File(parent, "a.txt");
        System.out.println(file);
    }

    public static void main(String[] args) {
        demo01();
        demo02("C:\\", "c.txt");
        demo03();
    }
}

文件路径获取(俩种)
import java.io.File;

public class Demo03FilePath {
    public static void main(String[] args) {
        demo01();
        demo02();
        demo03();
        demo04();
    }

    /**
     *   无论传入参数时绝对路径还是相对路径,都返回绝对路径
     * */
    public static void demo01() {
        File file = new File("D:\\shiyan\\a.txt");
        String path = file.getAbsolutePath();
        System.out.println(path);

        File file1 = new File("a.txt");
        String path2 = file1.getAbsolutePath();
        System.out.println(path2);
    }

    /**
     *   此方法获取构造方法中传递的路径
     * */
    public static void demo02() {
        File file = new File("D:\\shiyan\\a.txt");
        String path = file.getPath();
        System.out.println(path);

        File file1 = new File("a.txt");
        String path2 = file1.getPath();
        System.out.println(path2);
    }

    /**
     *  获取构造方法传递路径的结尾部分(文件/文件夹)
     * */
    public static void demo03() {
        File file = new File("D:\\shiyan\\a.txt");
        String name = file.getName();
        System.out.println(name);

        File file1 = new File("D:\\shiyan");
        String name2 = file1.getName();
        System.out.println(name2);
    }

    /**
     *  获取构造方法所表示的文件大小(以字节为单位)
     *     注意:文件夹没有大小,不能获取
     *           若构造方法中给出的路径不存在,返回0
     * */
    public static void demo04() {
        File file = new File("D:\\shiyan\\a.txt");
        long l1 = file.length();
        System.out.println(l1);

        File file1 = new File("D:\\shiyan");
        long l2 = file1.length();
        System.out.println(l2);
    }
}

文件及文件夹的创建
import java.io.File;

public class Dmeo04FileOperation {
    //判断File对象是否以文件或是文件夹结尾
    //判断File对象是否已文件夹结尾
    //public boolean isDirectory();
    //判断File对象是否以文件结尾
    //public boolean isFile();

    //创建一个新的文件
    //public boolean createNewFile();

    //删除改文件
    //public boolean delete();

    //判断文件是否存在
    //public boolean isExists();

    /**
     *   创建单级文件夹
     *      public boolean mkdir();
     *   既可以创建单级文件夹又可以创建多级文件夹
     *      public boolaen mkdirs();
     *    注意:以上都是创建文件夹,返回值都是表示文件是否创建成功,不能创建文件
     * */
    public static void show() {
        File file = new File("D:\\aaa");
        boolean flag = file.mkdir();
        System.out.println(flag);

        File file1 = new File("D:\\ccc\\ddd");
        boolean flag1 = file1.mkdir();
        boolean flag2 = file1.mkdirs();
        System.out.println(flag1);
        System.out.println(flag2);


    }

    public static void main(String[] args) {
        show();
    }
}

文件夹中所有文件的遍历
import java.io.File;

public class Dmeo05FileTravesal {

    /**
     *   文件遍历
     *     list方法和listFiles方法遍历的是构造方法中给出的目录
     *     构造方法中给出的目录不存在或不是目录则抛出空指针异常
     * */

    /**
     *   public String[] list();  返回一个字符串数组,表示File目录中所有的子文件或目录
     *     也可以获取隐藏文件,返回每个文件或问价夹名称
     * */
    public static void show() {
        File file = new File("D:\\tools");
        String[] arr = file.list();
        for (String e : arr) {
            System.out.println(e);
        }
    }

    /**
     *   public File[] listFiles();  返回一个File数组,表示File目录中所有的子文件或目录
     *      返回数组中每个元素的绝对路径
     */
    public static void showe() {
        File file = new File("D:\\tools");
        File[] arr = file.listFiles();
        for (File f : arr) {
            System.out.println(f);
        }
    }


    /**
     *    递归遍历一个文件夹中所有的文件以及文件夹
     */
    public static void getDirectoy(File dir) {
        //打印被遍历的目录名称
        System.out.println(dir);
        //获取当前文件夹下的文件以及文件夹
        File[] files = dir.listFiles();
        //遍历File数组
        for (File f : files) {
            //判断是文件还是文件夹
            if (f.isDirectory()) {
                getDirectoy(f);
            } else {
                System.out.println(f);
            }
        }
    }

    /**
     *   遍历文件夹下的所有文件及文件夹,获取特定类型文件
     * */
    public static void getDirectoy2(File dir) {
        //打印被遍历的目录名称
        System.out.println(dir);
        //获取当前文件夹下的文件以及文件夹
        File[] files = dir.listFiles();
        //遍历File数组
        for (File f : files) {
            //判断是文件还是文件夹
            if (f.isDirectory()) {
                getDirectoy(f);
            } else {
                /**
                 * String name = f.getName();
                 * String path = f.getPath();
                 */
                String s = f.toString();
                boolean flag = s.endsWith(".java");
                if (flag) {
                    System.out.println(f);
                }
            }
        }
    }

    public static void main(String[] args) {
        show();
        showe();
        File file = new File("D:\\tools");
        getDirectoy(file);
        getDirectoy2(file);
    }
}

文件过滤器
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class Demo06FileFilter {
    /**
     *  文件过滤器
     *     File类中有俩个重载lisTfiles的方法,方法的参数传递的就是过滤器
     *     File[] listFies(FileFilter fileFilter);   用来过滤文件File对象
     *     File[] listFile(FileNameFilter fileNameFilter);   用来过滤文件名称
     *
     *   注意:俩个过滤器方法没有实现类,使用时需要重写实现类
     */

    /**
     *   使用过滤器过滤.java结尾的文件
     * */
    public static void getDirectoy2(File dir) {
        //打印被遍历的目录名称
        //使用匿名内部类创建
//        File[] files = dir.listFiles(new FileFilter() {
//            @Override
//            public boolean accept(File file) {
//                //当为文件夹时或是.java文件返回true
//                return file.isDirectory() || file.toString().toLowerCase().endsWith(".java");
//            }
//        });

        //最简化lamda表达式
//        File[] files = dir.listFiles(file -> file.isDirectory() || file.toString().toLowerCase().endsWith(".java"));

        //使用FileNameFilter过滤器
//        File[] files = dir.listFiles(new FilenameFilter() {
//            @Override
//            public boolean accept(File file, String s) {
//                return new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java");
//            }
//        });

        //使用lamda表达式,条件:接口中只有一个抽象方法
//        File[] files = dir.listFiles((file, s) -> {
//                return new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java");
//            }
//        );

        //方法中只有一行代码,可以这样简化
        File[] files = dir.listFiles((file, s) -> new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java"));

        //遍历File数组
        for (File f : files) {
            //判断是文件还是文件夹
            if (f.isDirectory()) {
                getDirectoy2(f);
            } else {
                System.out.println(f);
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("D:\\tools");
        getDirectoy2(file);
    }
}
常用方法
递归
直接递归
  • 方法自己调用自己
间接递归
  • A方法调用B方法,B方法调用C方法,C方法调用调用A方法
注意事项
  • 递归要有递归出口,且构造方法不可以递归
  • 递归次数不能太多,否则会导致栈内存溢出
递归调用过程图解

过滤器方法底层原理

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值