day22File&递归

本文详细介绍了Java中File类的构造方法、文件创建、删除、重命名、判断及获取功能,包括绝对路径、相对路径、文件长度等。同时,讲解了文件过滤器的实现和递归的概念,强调了递归使用时的注意事项,如设置结束条件和防止栈内存溢出。
摘要由CSDN通过智能技术生成

File:是java对于文件和文件夹抽象表现形式
构造方法:
    public File(String pathname)
        通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。
    public File(String parent,String child)
        从父路径名字符串和子路径名字符串创建新的File实例。
    public File(File parent,String child)
        从父抽象路径名和子路径名字符串创建新的File实例。

package com.shujia.wyh.day22;

import java.io.File;

public class FileDemo1 {
    public static void main(String[] args) {
        //public File(String pathname) 根据一个路径得到一个File对象
        //F:\a.txt封装成一个File对象
        File file = new File("F:\\a.txt");
        System.out.println(file);

        //public File(String parent,String child)
        //父的路径:F:\demo
        //子路径:b.txt
        File file1 = new File("F:\\demo", "b.txt");
        System.out.println(file1);

        //public File(File parent,String child)
        //父的路径:F:\demo
        //子路径:b.txt
        File file2 = new File("F:\\demo");
        File file3 = new File(file2, "b.txt");
        System.out.println(file3);


    }
}

File的功能:
    创建功能:
        public boolean createNewFile() 创建一个文件
        public boolean mkdir() 创建一个文件夹
        public boolean mkdirs() 创建多级文件夹

        注意:
            1、要想在某个目录下创建文件,前提是该目录必须存在
            2、后缀名也是文件名字一部分,也可能是一个文件夹

package com.shujia.wyh.day22;

import java.io.File;
import java.io.IOException;

public class FileDemo2 {
    public static void main(String[] args) {
        //需求:我想在F盘下面创建一个文件夹demo2
        //封装成File对象,不需要文件或者目录是否已经存在,它只是将一个路径抽象的用File表示
        //将来你可以用File类中的一些方法,来进行创建或者删除
        File file = new File("F:\\demo2");
        //public boolean mkdir() 创建由此抽象路径名命名的目录,如果目标文件夹已经存在,就不创建了,返回false
        System.out.println(file.mkdir());
              
        //需求2:我想在F盘下面的demo2文件夹中创建一个文件b.txt
        //将目标文件封装成File对象
        File file1 = new File("F:\\demo2\\b.txt");
        //public boolean createNewFile()当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
        try {
            System.out.println(file1.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(file1.mkdir());

        //public boolean mkdirs() 创建多级文件夹
        File file2 = new File("F:\\demo2\\demo3\\demo4\\demo5");
        System.out.println(file2.mkdirs());


    }
}

    删除功能:
        public boolean delete()
        注意:
            要想删除一个文件夹,这个文件里面必须是空的

package com.shujia.wyh.day22;

import java.io.File;
import java.io.IOException;

public class FileDemo3 {
    public static void main(String[] args) throws IOException {
        File file = new File("F:\\a.txt");
        System.out.println(file.delete());

        File file2 = new File("aaa\\bbb\\ccc");
        System.out.println(file2.mkdirs());

        //需求:我想删除aaa这个文件夹
        //注意:要删除的目录必须是为空
        System.out.println(file2.delete()); //删除ccc

        File file4 = new File("aaa\\bbb");
        System.out.println(file4.delete()); //删除bbb


        File file3 = new File("aaa");
        System.out.println(file3.delete()); //删除aaa

    }
}

    重命名功能
        public boolean renameTo(File dest)
        注意:被重命名文件也要创建

package com.shujia.wyh.day22;

import java.io.File;

public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("E:\\ftm.jpg");
        //现在我想重命名为冯提莫.jpg
        //注意:被重命名文件也要创建
        File file1 = new File("E:\\冯提莫.jpg");
        System.out.println(file.renameTo(file1));
    }
}

    判断功能
        public boolean isDirectory() 判断是否是文件夹
        public boolean isFile() 判断是否是文件
        public boolean exists() 判断目标文件或者文件夹是否存在
        public boolean canRead() 判断是否可读
        public boolean canWrite() 判断是否可读
        public boolean isHidden() 判断是否隐藏

    基本获取功能
        public String getAbsolutePath() 获取绝对路径,或者说完整路径
        public String getPath() 获取相对路径
        public String getName() 获取名称
        public long length() 获取的长度是字节数
        public long lastModified() 返回的是一个时间戳

    高级获取功能
        public String[] list() 获取指定目录下的所有文件和文件夹的名称组成的数组
        public File[] listFiles() 获取指定目录下的所有文件和文件夹形成的File对象数组(遍历后可调用方法)

package com.shujia.wyh.day22;

import java.io.File;

/*
    需求:判断D盘下面有没有.jpg后的文件,如果有,就输出此文件名称
        1、将D盘根目录封装成一个File对象
        2、获取该目录下所有的文件或者文件夹组成的File对象数组
        3、遍历File数组,得到每一个File对象,然后判断是否是文件
            是:继续判断是否以.jpg后缀
                是:输出名称
                不是:不管他
 */
public class FileDemo8 {
    public static void main(String[] args) {
        File file = new File("D:\\");
        File[] files = file.listFiles();
        for(File f : files){
            if(f.isFile()){
                if(f.getName().endsWith(".jpg")){ //endsWith()结尾
                    System.out.println(f.getName());
                }
            }
        }

    }
}

    文件名称过滤器的实现思想及代码(匿名内部类)
        public String[] list(FilenameFilter filter)
        public File[] listFiles(FilenameFilter filter)

package com.shujia.wyh.day22;

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

public class FileDemo9 {
    public static void main(String[] args) {
        //创建File对象
        File file = new File("D:\\");

        //public String[] list(FilenameFilter filter)
        String[] list = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //目录下的文件或者文件夹该不该获取到,却决于这里的返回值
                //true,就获取到加到数组,如果是false,就不获取,不加到数组中
                File file1 = new File(dir, name);
                //dir父抽象路径名 name子路径名字符串
                boolean b = file1.isFile();
                boolean b1 = name.endsWith(".jpg");
                return b && b1;
            }
        });

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

    }
}

递归:方法定义中调用方法本身的现象

        递归和嵌套的区别:递归是方法定义的时候出现,嵌套是方法使用的时候出现的
        注意:
            1、递归一定要有一个出口(结束条件),否则就成了死递归
            2、递归的次数不能太多,否则会造成,栈内存溢出
            3、构造方法不能发生递归

        例:用递归求出实现5的阶乘

package com.shujia.wyh.day22;

public class DiGuiDemo2 {
    public static void main(String[] args) {

    /**
     * 递归方法的前提:
     *  返回值类型:int
     *  参数列表:int i
     *
     *  出口条件:
     *    if(i==1){return 1}
     *
     *  递归主体逻辑:
     *     if(i!=1){
     *         return i*diGui(i-1);
     *     }
     */
    public static int diGui(int i){
        if(i==1){
            return 1;
        }else {
            return i*diGui(i-1);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值