Java中的File类,递归是什么?

一、IO概述

  当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。

  当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

  因此我们把这种输入和输出动作称为IO操作。

二、File类

  1、File类构造函数

    

复制代码
public class FileDemo {
    public static void main(String[] args) {
        //File构造函数演示
        String pathName = "e:\\java_code\\day22e\\hello.java";
        File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。
        System.out.println(f1);
        
        File f2 = new File("e:\\java_code\\day22e","hello.java");
        System.out.println(f2);
        
        //将parent封装成file对象。
        File dir = new File("e:\\java_code\\day22e");
        File f3 = new File(dir,"hello.java");
        System.out.println(f3);
    }
}
复制代码

  2、File类属性

//与系统有关的路径分隔符
        System.out.println(File.pathSeparator);
        //与系统有关的默认名称分隔符
        System.out.println(File.separator);

  3、File类的获取

 

 

   方法演示如下:

复制代码
public class FileMethodDemo {
    public static void main(String[] args) {
        //创建文件对象
        File file = new File("Test22.java");
        //获取文件的绝对路径,即全路径
        String absPath = file.getAbsolutePath();
        //File中封装的路径是什么获取到的就是什么。
        String path = file.getPath();
        //获取文件名称
        String filename = file.getName();
        //获取文件大小
        long size = file.length();
        
        System.out.println("absPath="+absPath);
        System.out.println("path="+path);
        System.out.println("filename="+filename);
        System.out.println("size="+size);
    }
}
复制代码

  5、文件和文件夹的创建删除

  

 

 

 

复制代码
public static void main(String[] args) throws IOException {
        //创建文件
        File file=new File("F:\\java\\io0512\\a.txt");
        //boolean flag=file.createNewFile();
        //System.out.println(flag);
        //判断文件是否存在
        System.out.println(file.exists());
        //判断是否是个文件夹
        System.out.println(file.isDirectory());
        //判断是否是文件
        System.out.println(file.isFile());
        //删除文件
        //file.delete();
        //创建文件夹
        file.mkdir();
        File file2=new File("F:\\java\\io0512\\q\\z\\x\\c");
        boolean a= file2.mkdirs();
        System.out.println(a);
    }
复制代码

  6、listFiles()方法介绍

  

复制代码
public class FileMethodDemo3 {
    public static void main(String[] args) {
        File dir = new File("e:\\java_code");
        //获取的是目录下的当前的文件以及文件夹的名称。
        String[] names = dir.list();
        for(String name : names){
            System.out.println(name);
        }
        //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
        File[] files = dir.listFiles();
        for(File file : files){
            System.out.println(file);
        }
    }
}
复制代码

  注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

     1,指定的目录必须是存在的,

     2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

  7、文件过滤器

  

 

 

   

    测试类:

复制代码
public class FileDemo2 {
    public static void main(String[] args) {
        //获取扩展名为.java所有文件
        //创建File对象
        File file = new File("E:\\code\\day11_code");
        //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
        File[] files = file.listFiles(new MyFileFilter());
        //遍历获取到的所有符合条件的文件
        for (File f : files) {
            System.out.println(f);
        }
    }
}
复制代码

  自定类继承FilenameFilter过滤器接口:

复制代码
//定义类实现文件名称FilenameFilter过滤器
class MyFileFilter implements FilenameFilter{
    public boolean accept(File dir, String name) {
        return name.endsWith(".java");
    }
}
复制代码

二、递归

  1、递归的概述:

    递归,指在当前方法内调用自己的这种现象

public void method(){
    System.out.println(“递归的演示”);
    //在当前方法内调用自己
    method();
}

  2、使用递归计算1-n直接的和

复制代码
public static void main(String[] args) {
        //计算1~num的和,使用递归完成
        int n = 5;
        int sum = getSum(n);
        System.out.println(sum);
        
    }
    public static int getSum(int n) {
        if(n == 1){
            return 1;
        }
        return n + getSum(n-1);
    }
}
复制代码

  3、递归打印所有子目录中的文件路径

步骤:

1. 指定要打印的目录File对象

2. 调用getFileAll()方法

2.1 获取指定目录中的所有File对象

2.2 遍历得到每一个File对象

2.3 判断当前File 对象是否是目录

判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法

判断结果为false,说明是文件,打印文件的路径

复制代码
public class FileDemo2 {
    public static void main(String[] args) {
        File file = new File("d:\\test");
        getFileAll(file);
    }
    //获取指定目录以及子目录中的所有的文件
    public static void getFileAll(File file) {
        File[] files = file.listFiles();
        //遍历当前目录下的所有文件和文件夹
        for (File f : files) {
            //判断当前遍历到的是否为目录
            if(f.isDirectory()){
                //是目录,继续获取这个目录下的所有文件和文件夹
                getFileAll(f);
            }else{
                //不是目录,说明当前f就是文件,那么就打印出来
                System.out.println(f);
            }
        }
    }
}
复制代码

  4、斐波那契数列

复制代码
public static void main(String[] args) {
        System.out.println(get(12));
    }
    public static int get(int n){
        if(n==1){
            return 1;
        }
        if(n==2){
            return 1;
        }
        return get(n-1)+get(n-2);
    }
复制代码

三、冒泡排序

复制代码
public static void main(String[] args) {
        int[]arr={7,1,6,22,11,3,2};
        int n=0;
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    n=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=n;
                }
            }
        }
        for(int i:arr){
            System.out.println(i);
        }
    }
复制代码
posted @ 2020-07-30 09:39  01zh  阅读(161)  评论(0编辑  收藏  举报