Java

复习JavaSE 11.File 递归

2019-03-10  本文已影响0人  第二套广播体操

File构造方法

 File file = new File("D:\\IO\\IO1.txt");
        if (!file.exists())file.mkdir();

会产生一个名字叫IO1.txt的文件夹

public class FileMethod {

    public static void main(String[] args) throws IOException {
//        fileDemo1();
        fileDemo2();
    }

    private static void fileDemo2() throws IOException {
        File file = new File("D:\\IO\\IO1.txt");
        if (!file.exists())file.mkdir();

        File file1 = new File(file,"DEMO2.txt");
        if (!file1.exists())file1.createNewFile();

    }

    private static void fileDemo1() {
        File file = new File("D:\\IO\\DEMO1.txt");
        System.out.println(file.getAbsolutePath());
        File file1=new File("D:\\IO");
        File file2 = new File(file1,"DEMO1.txt");
    }
}

递归消耗资源
*迭代一定要有条件限定,保证递归可以停止下来 否则会发生栈内存溢出
*递归虽然有限定 但是递归次数不能太多 否则也会造成栈内存过多
*构造方法不能使用递归
计算1到n的和 不推荐使用递归 应该使用for循环

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

        int i=1;
        int n=4;
        int add = add(i, n);
        System.out.println(add);
    }

    private static int add(int i,int n) {
       if (i<n) {
          i+=add(++i,n);
       }
       return i;
    }
}

阶乘

public class DiguiDemo2 {
    public static void main(String[] args) {
        int n = 5;
        int i = jieCheng(n);
        System.out.println(i);
    }

    private static int jieCheng(int n) {
        if (n==1)
            return 1;
        return n*jieCheng(n-1);
    }
}

遍历文件夹

public class FileName {
    public static void main(String[] args) {
        File file = new File("D:\\QQBrowser");
       FileNameDemo1(file);


    }
    private static void FileNameDemo1(File file) {
//        打印目录
        System.out.println(file);
//        遍历目录下的文件
        File[] files=file.listFiles();
        for (File file1 : files) {
//            如果是文件夹 则遍历这个文件夹
            if (file1.isDirectory())
                FileNameDemo1(file1);
//            如果是文件 则打印他
            else System.out.println(file1);
        }
    }
}

ListFiles中的文件过滤器 FileFilter FileNameFilter 均为接口
listFiles将File对象一个个得传递到过滤器中进行过滤
符合要求的true得以保存到File[]中

public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
//如果是子文件夹 也得以保存 否则递归时没有子文件夹 查询不了里面的文件
        if (pathname.isDirectory()) return true;
        return pathname.getName().toLowerCase().endsWith(".java");
    }
}
public class FileFilterDemo {
    public static void main(String[] args) {
        File file = new File("D:\\IO");
        FileNameDemo1(file);
    }

    private static void FileNameDemo1(File file) {

//        File[] files=file.listFiles(new FileFilterImpl());

       /* File[] files=file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
            }
        });*/

       /*File[] files=file.listFiles((pathname -> pathname.isDirectory()||
               pathname.getName().toLowerCase().endsWith(".java")));*/

        File[] files = file.listFiles(((dir, name) ->
                new File(dir, name).isDirectory() || name.toLowerCase().endsWith(".java")));
        for (File file1 : files) {

            if (file1.isDirectory())
                FileNameDemo1(file1);

            else System.out.println(file1);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读