IO流之File类

File类

File 对应的硬盘上的文件或者文件夹

位于java.io包下

File对文件/文件夹进行操作,但是无法对文件内容进行操作,读取/写入不可以操作,但是可以创文件夹/读取文件路径,IO流才可以进行操作

文件/文件夹的路径:linux使用/作为文件分割符,但是windows使用\作为文件分割符,java中可以处理文件分割符,支持多平台!!但是用 \ 时,由于在java中\作为转移符号,所以使用双杠\\,或者使用这个:

IO流之File类_第1张图片

 使用File类

IO流之File类_第2张图片

        //不推荐写法
        //File file = new File("D:\\实验室\\七龙珠.txt");

        //推荐写法  绝对路径写法
        File file = new File("D:/java");
        File file11 = new File("D:/实验室");

        //推荐写法二
        File file1  = new File("D:/实验室","七龙珠.txt");

        File file2 = new File(file11,"七龙珠.txt");
        //File不会检查文件/目录是否存在 但是File对象依旧可以存在

        File file4 = file.getAbsoluteFile();
        //判断文件是否存在
        System.out.println(file2.exists());

        //获取绝对路径
        System.out.println(file.getAbsoluteFile());

        //不同对象,指向同一个文件
        System.out.println(file4);
        System.out.println(file);
        //File file1  = new File("D:/实验室","七龙珠.txt");
        //File file4 = file.getAbsoluteFile();
        System.out.println("file与file4是否相等"+(file == file4));

        //获取文件名
        String name = file.getName();
        System.out.println("文件名:"+name);

        //获取上级目录路径
        File parentFile = file.getParentFile();
        System.out.println("上级目录:"+parentFile);

        //返回文件的字节大小
        System.out.println("文件的字节大小:"+file.length());//单位是字节

        //返回抽象路径名表示的文件上次修改的时间  -> 返回的是日期的毫秒值
        System.out.println("文件上次修改的时间:"+file.lastModified());

        //创建一个文件
        if(!file.exists()){
            try {
                file.createNewFile();
                System.out.println("文件创建成功");
            } catch (IOException e) {
                //如果上机目录不存在就会有错误 创建不了对应的文件
                e.printStackTrace();
            }
        }

        //创建文件夹  mkdir只创建本机目录,如果上级不存在,不能创建
        File file5 = new File("D:/java/a");
        boolean mkdir = file5.mkdir();
        System.out.println("目录是否创建成功:" + mkdir);
        //对于mkdirs,不同于mkdir 会把不存在的上级目录帮你创建
        File file6 = new File("D:/java/a/b/c");
        boolean mkdirs = file6.mkdirs();
        System.out.println("是否创建成功:" + mkdirs);

        //删除文件或者目录
        //delete() -> 只可删除空目录!important
        boolean delete1 = file6.delete();
        System.out.println("文件是否删除:" + delete1);

        //判断是一个文件还是文件夹 true是一个文件 false表示不是文件
        file.isFile();
        file.isDirectory();

        //重命名
        //file.renameTo();
 //目录的遍历
        /*File file = new File("D:/java/a/b");//得到对应的子文件,目录的名字
        String[] Filename = file.list();
        for(String filename:Filename){
            System.out.println(filename);
        }*/
        //筛选得到.txt结尾的文件
        File file = new File("D:/java/a/b/c");//得到对应的子文件,目录的名字
        String[] Filename = file.list(new FilenameFilter() {
            //b目录有一个目录遍历到子文件/子目录就会调用一次方法
            @Override
            public boolean accept(File dir, String name) {
                //dir:表示目录的路径
//                System.out.println("dir:"+dir);
//                //name:当前目录的子文件和子目录名字
//                System.out.println("name:"+name);
//                return true;//false就是为了筛选子文件,子目录  true就是返回这个文件
                File subFile = new File(dir,name);
                return name.endsWith(".txt") && subFile.isFile();
            }
        });
        for(String filename:Filename){
            System.out.println(filename);
        }
        //遍历得到子文件 子目录File对象
//        File[] files = file.listFiles();
//        for (File file1: files) {
//            System.out.println(file1.getParentFile()+"\\"+file1.getName());
//        }
        /*D:\java\a\b\c\aa.txt
        D:\java\a\b\c\bb.txt
        D:\java\a\b\c\cc.xls*/

        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".txt") && pathname.isFile();
            }
        });
        for (File file1 : files) {
            System.out.println(file1);
        }

 方法递归

方法内部调用自己,也是一个循环,但是递归的胜读不能太深,循环次数不能太多,不然效率很低,如果能够使用循环就尽量使用循环

IO流之File类_第3张图片
    long rs = func(7);
    System.out.println(rs);

}
public static long func(int n){
    if(n == 1 || n == 2) return 1;
    return func(n - 1) + func(n - 2);
}

 使用递归遍历某个目录下的所有的文件和目录

public static void main(String[] args) {
        func(new File("D:/java/a"));
    }
    public static void func(File path){
        if (path.isFile()){//是文件的话
            System.out.println("因为你只是一个文件:不是目录给你返回->"+path.getName());
        }else{//是目录的话
            System.out.println("文件夹:"+path.getName());
            File[] files = path.listFiles();//得到所有的子文件,然后开始遍历
            for (File file : files) {
                /*if(file.isFile()){
                    System.out.println("因为你只是一个文件:不是目录给你返回->"+path.getName());
                }else{
                    File[] files1 = path.listFiles();
                }*/
                //调用自己即可
                func(file);
            }
        }
    }

你可能感兴趣的:(java,java)