17 - IO - 递归 文件

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

    直接递归
        public void methodA(){
            methodA();
        }
    间接递归
        public void metohdB(){
            methodC();
        }
        public void methodC(){
            methodB();
        }
package cn.itcast.demo2;
/*
 *  方法的递归调用
 *    方法自己调用自己
 *  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
 *  注意:
 *     递归一定要有出口, 必须可以让程序停下
 *     递归次数不能过多
 *     构造方法,禁止递归
 */
public class DiGuiDemo {
    public static void main(String[] args) {
        /*int sum = getSum(3);
        System.out.println(sum);*/
        System.out.println(getJieCheng(5));
        System.out.println(getFBNQ(12));
    }
    /*
     *  方法递归,计算斐波那契数列
     *  
     */
    public static int getFBNQ(int month){
        if( month == 1)
            return 1;
        if( month == 2)
            return 1;
        return getFBNQ(month-1)+getFBNQ(month-2);
    }
    
    /* 
     *  计算阶乘 5!
     *   5*4*3*2*1
     */
    public static int getJieCheng(int n){
        if ( n == 1)
            return 1;
        return n * getJieCheng(n-1);
    }
            
    /*
     *  计算 1+2+3+100和 = 5050
     *  计算规律:
     *    n+(n-1)+(n-2)
     *    100+(100-1)+(99-1)+...1
     */
    public static int getSum(int n){
        if( n == 1)
            return 1;
        return n + getSum(n-1);
    }
    
}

 

2. 递归注意实现

要有出口,否则就是死递归
 次数不能太多,否则就内存溢出

 

3. File: 文件和目录路径名的抽象表示形式

    构造方法:
        public File(String pathname) 通过给定的文件或文件夹的路径,来创建对应的File对象
        public File(String parent, String child) 通过给定的父文件夹路径,与给定的文件名称或目录名称来创建对应的File对象
        public File(File parent,  String child)通过给定的File对象的目录路径,与给定的文件夹名称或文件名称来创建对应的File对象

    路径的分类:
        绝对路径, 带盘盘符
            E:\Workspace\day20_File\abc.txt
        相对路径, 不带盘符
    
        注意: 当指定一个文件路径的时候,如果采用的是相对路径,默认的目录为 项目的根目录

 

4. File方法

    public boolean createNewFile()创建文件
        返回值为true, 说明创建文件成功
        返回值为false,说明文件已存在,创建文件失败

    public boolean mkdir() 创建单层文件夹
        创建文件夹成功,返回 true
        创建文件夹失败,返回 false

    public boolean mkdirs() 创建多层文件夹

    public boolean delete()
        删除此抽象路径名表示的文件或目录。
        如果此路径名表示一个目录,则该目录必须为空才能删除

    public boolean isDirectory() 判断是否为文件夹

    public boolean isFile() 判断是否为文件
    
    public boolean exists() 判断File对象对应的文件或文件夹是否存在
    
    public String getAbsolutePath() 获取当前File的绝对路径
    
    public String getName() 获取当前File对象的文件或文件夹名称
    
    public long length() 获取当前File对象的文件或文件夹的大小(字节)
    
    public File[] listFiles() 获取File所代表目录中所有文件或文件夹的绝对路径
package cn.itcast.demo;

import java.io.File;

/*
 *  java.io.File
 *    将操作系统中的,文件,目录(文件夹),路径,封装成File对象
 *    提供方法,操作系统中的内容
 *    File与系统无关的类
 *    文件 file
 *    目录 directory
 *    路径 path
 */
public class FileDemo {
    public static void main(String[] args) {
        //File类静态成员变量
        //与系统有关的路径分隔符
        String separator = File.pathSeparator;
        System.out.println(separator);// 是一个分号,目录的分割   Linux :
        
        //与系统有关的默认名称分隔符
        separator = File.separator;
        System.out.println(separator);// 向右 \  目录名称分割  Linux / 
    }
}
package cn.itcast.demo;

import java.io.File;

/*
 *  File类的构造方法
 *  三种重载形式
 */
public class FileDemo1 {
    public static void main(String[] args) {
        function_2();
    }
    /*
     *  File(File parent,String child)
     *  传递路径,传递File类型父路径,字符串子路径
     *  好处: 父路径是File类型,父路径可以直接调用File类方法
     */
    public static void function_2(){
        File parent = new File("d:");
        File file = new File(parent,"eclipse");
        System.out.println(file);
    }
    
    /*
     *  File(String parent,String child)
     *  传递路径,传递字符串父路径,字符串子路径
     *  好处: 单独操作父路径和子路径
     */
    public static void function_1(){
        File file = new File("d:","eclipse");
        System.out.println(file);
    }
    
    /*
     *  File(String pathname)
     *  传递路径名: 可以写到文件夹,可以写到一个文件
     *  c:\\abc   c:\\abc\\Demo.java
     *  将路径封装File类型对象
     */
    public static void function(){
        File file = new File("d:\\eclipse");
        System.out.println(file);
    }
}
package cn.itcast.demo;

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

/*
 *  File类的创建和删除功能
 *  文件或者是目录
 */
public class FileDemo2 {
    public static void main(String[] args)throws IOException {
        function_2();
    }
    /*
     *  File类的删除功能
     *  boolean delete()
     *  删除的文件或者是文件夹,在File构造方法中给出
     *  删除成功返回true,删除失败返回false
     *  删除方法,不走回收站,直接从硬盘中删除
     *  删除有风险,运行需谨慎
     */
    public static void function_2(){
        File file = new File("c:\\a.txt");
        boolean b = file.delete();
        System.out.println(b);
    }
    
    /*
     *  File创建文件夹功能
     *  boolean mkdirs() 创建多层文件夹
     *  创建的路径也在File构造方法中给出
     *  文件夹已经存在了,不在创建
     */
    public static void function_1(){
        File file = new File("c:\\abc");
        boolean b = file.mkdirs();
        System.out.println(b);
    }
    
    
    /*
     *  File创建文件的功能
     *  boolean createNewFile()
     *  创建的文件路径和文件名,在File构造方法中给出
     *  文件已经存在了,不在创建
     */
    public static void function()throws IOException{
        File file = new File("c:\\a.txt");
        boolean b = file.createNewFile();
        System.out.println(b);
    }
}
package cn.itcast.demo;

import java.io.File;

/*
 *  File类的获取功能
 */
public class FileDemo3 {
    public static void main(String[] args) {
        function_3();
    }
    /*
     * File类的获取功能
     * String getParent() 返回String对象
     * File getParentFile()返回File对象
     * 获取父路径
     */
    public static void function_3(){
        File file = new File("d:\\eclipse\\eclipse.exe");
        File parent = file.getParentFile();
        System.out.println(parent);
    }
    
    /*
     * File类获取功能
     * String getAbsolutePath() 返回String对象
     * File   getAbsoluteFile() 返回File对象
     * 获取绝对路径
     * eclipse环境中,写的是一个相对路径,绝对位置工程根目录
     */
    public static void function_2(){
        File file = new File("src");
        File absolute = file.getAbsoluteFile();
        System.out.println(absolute);
    }
    
    /*
     * File类获取功能
     * long length()
     * 返回路径中表示的文件的字节数
     */
    public static void function_1(){
        File file = new File("d:\\eclipse\\eclipse.exe");
        long length = file.length();
        System.out.println(length);
    }
    
    /*
     *  File类的获取功能
     *  String getName()
     *  返回路径中表示的文件或者文件夹名
     *  获取路径中的最后部分的名字
     */
    public static void function(){
        File file = new File("d:\\eclipse\\eclipse.exe");
        String name = file.getName();
        System.out.println(name);
        
        /*String path = file.getPath();
        System.out.println(path);*/
//        System.out.println(file);
    }
}
package cn.itcast.demo;

import java.io.File;

/*
 *  File类的判断功能
 */
public class FileDemo4 {
    public static void main(String[] args) {
        function_1();
    }
    /*
     *  File判断功能
     *  boolean isDirectory()
     *  判断File构造方法中封装的路径是不是文件夹
     *  如果是文件夹,返回true,不是文件返回false
     *  
     *  boolean isFile()
     *  判断File构造方法中封装的路径是不是文件
     */
    public static void function_1(){
        File file = new File("d:\\eclipse\\eclipse.exe");
        if(file.exists()){
            boolean b = file.isDirectory();
            System.out.println(b);
        }
    }
    
    /*
     *  File判断功能
     *  boolean exists()
     *  判断File构造方法中封装路径是否存在
     *  存在返回true,不存在返回false
     */
    public static void function(){
        File file = new File("src");
        boolean b = file.exists();
        System.out.println(b);
    }
}
package cn.itcast.demo1;

import java.io.File;

/*
 *  File类获取功能
 *  list
 *  listFiles
 */
public class FileDemo {
    public static void main(String[] args) {
        function_2();
    }
    public static void function_2(){
        //获取系统中的所有根目录
        File[] fileArr = File.listRoots();
        for(File f : fileArr){
            System.out.println(f);
        }
    }
    
    /*
     *  File类的获取功能
     *  File[] listFiles()
     *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
     *  返回的是目录或者文件的全路径
     */
    public static void function_1(){
        File file = new File("d:\\eclipse");
        File[] fileArr = file.listFiles();
        for(File f : fileArr){
            System.out.println(f);
        }
    }
    
    /*
     *  File类的获取功能
     *  String[] list()
     *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
     *  返回只有名字
     */
    public static void function(){
        File file = new File("c:");
        String[] strArr = file.list();
        System.out.println(strArr.length);
        for(String str : strArr){
            System.out.println(str);
        }
    }
}
package cn.itcast.demo1;

import java.io.File;

/*
 *  File类的获取,文件获取过滤器
 *  遍历目录的时候,可以根据需要,只获取满足条件的文件
 *  遍历目录方法 listFiles()重载形式
 *  listFiles(FileFilter filter)接口类型
 *  传递FileFilter接口的实现类
 *  自定义FileFilter接口实现类,重写抽象方法,
 *  接口实现类对象传递到遍历方法listFiles
 */
public class FileDemo1 {
    public static void main(String[] args) {
        File file = new File("c:\\demo");
        File[] fileArr = file.listFiles(new MyFilter());
        for(File f : fileArr){
            System.out.println(f);
        }
    }
}
package cn.itcast.demo1;

import java.io.File;
import java.io.FileFilter;

/*
 *  自定义过滤器
 *  实现FileFilter接口,重写抽象方法
 */
public class MyFilter implements FileFilter{
    public boolean accept(File pathname)  {
        /*
         * pathname 接受到的也是文件的全路径
         * c:\\demo\\1.txt
         * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
         * 文件的后缀结尾是.java
         */
        //String name = pathname.getName();
        return pathname.getName().endsWith(".java");
        
    }
}
package cn.itcast.demo2;

import java.io.File;

/*
 *  对一个目录的下的所有内容,进行完全的遍历
 *  编程技巧,方法的递归调用,自己调用自己
 */
public class FileDemo {
    public static void main(String[] args) {
        File dir = new File("d:\\eclipse");
        getAllDir(dir);
    }
    /*
     *  定义方法,实现目录的全遍历
     */
    public static void getAllDir(File dir){
        System.out.println(dir);
        //调用方法listFiles()对目录,dir进行遍历
        File[] fileArr = dir.listFiles();
        for(File f : fileArr){
            //判断变量f表示的路径是不是文件夹
            if(f.isDirectory()){
                //是一个目录,就要去遍历这个目录
                //本方法,getAllDir,就是给个目录去遍历
                //继续调用getAllDir,传递他目录
                getAllDir(f);
            }else{
                System.out.println(f);
            }
        }
    }
}
package cn.itcast.demo2;

import java.io.File;

/*
 *  遍历目录,获取目录下的所有.java文件
 *  遍历多级目录,方法递归实现
 *  遍历的过程中,使用过滤器
 */
public class FileDemo1 {
    public static void main(String[] args) {
        getAllJava(new File("c:\\demo"));
//        new File("c:\\demo").delete();
    }
    /*
     * 定义方法,实现遍历指定目录
     * 获取目录中所有的.java文件
     */
    public static void getAllJava(File dir){
        //调用File对象方法listFiles()获取,加入过滤器
        File[] fileArr = dir.listFiles(new MyJavaFilter());
        for(File f : fileArr){
            //对f路径,判断是不是文件夹
            if(f.isDirectory()){
                //递归进入文件夹遍历
                getAllJava(f);
            }else{
                System.out.println(f);
            }
        }
    }
}
package cn.itcast.demo2;

import java.io.File;
import java.io.FileFilter;

public class MyJavaFilter implements FileFilter {
    public boolean accept(File pathname) {
        //判断获取的是目录,直接返回true
        if(pathname.isDirectory())
            return true;
        return pathname.getName().toLowerCase().endsWith(".java");
    }

}
posted @ 2019-07-12 10:47  Alice的小屋  阅读(156)  评论(0编辑  收藏  举报