IO File(构造函数、文件夹创建删除、文件过滤器)、递归

   IO概述  (输入input和输出output) 简写

输出(写)Output:把内存中的数据存到持久化设备上

输入(写)Input:把持久设备上的数据读取到内存中

File 最关键的两个成员变量 

file 类包含三个东西:文件:file  目录(文件夹):directory  路径:path

路径分隔符

系统有关的路径分隔符 window下是  “”(pathSeparator)  Linux下是:“”(separator

 File类

类 :成员变量 成员方法 构造方法 

package com.oracle.demo01;
//成员变量
import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
        /*File类:  最关键的两个成员变量   ; 
        文件:file
        目录(文件夹):directory
        路径:path
        路径分隔符*/
//        与系统有关的路径分隔符  win 是 ;  linux 是 : 
        System.out.println(File.pathSeparator);  //;
//        与系统有关的路径名称分隔符 win 是  linux  是/
        System.out.println(File.separator);   //
    }
}

 构造函数

package com.oracle.demo01;
//构造函数
import java.io.File;

public class Demo02 {
    public static void main(String[] args) {
//        第一个构造方法
        File file=new File("f:\java\a.txt");//  "\"在java中转义的 所以是双\
        System.out.println(file);
//        第二个构造方法   父路径  子路径:适用多个文件
        File file2=new File("f:\java","a.txt");
        System.out.println(file2);
//        第三个构造方法 :File类的父、子路径
        File parent=new File("f:\java");
        File file3=new File(parent,"a.txt");
        System.out.println(file3);
    }
    
}

 File类获取

创建和删除

package com.oracle.demo01;
//File类的获取、文件的创建、删除、判断
import java.io.File;
import java.io.IOException;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        method02();
        method03();
        method04();
        method05();
    }
    public static void method01(){
        File file=new File("f:\java\a.text");
//        获取文件对象:绝对路径
        System.out.println(file.getAbsolutePath());
//        举例 :File file=new File("src");  src可能根本不存在,“”里面随便写  看前面的 file为准 
//        获取文件对象:文件名或者目录名
        System.out.println(file.getName());
//        获取文件对象路径所对应:字符串
        System.out.println(file.getPath());//类似toString()
//        获取文件的长度(文件的大小字节:Long类型)
        System.out.println(file.length());
    }
//    文件创建
    public static void method02() throws IOException{
        File file=new File("f:\java\b");
        boolean flag=file.createNewFile();//如果不加后缀,默认都建文件,不是文件夹
        System.out.println(flag);
    }
//    文件删除
    public static void method03(){
        File file=new File("F:\java\b");
//        删除文件  java的删除 =DOS下删除  彻底删除了
        boolean flag=file.delete();
        System.out.println(flag);
    }
//    文件判断
    public static void method04(){
        File file=new File("F:\java\a.txt");
//        判断该文件对象所对应的文件:是否存在
        System.out.println(file.exists());
//        判断该文件:是否是文件夹
        System.out.println(file.isDirectory());
//        判断该文件对象:是否文件
        System.out.println(file.isFile());        
    }
//    创建文件夹  
    public static void method05(){
        File file =new File("F:\java\B");//win下的目录名不区分大小写,最后的是目录名
        boolean flag=file.mkdirs(); //建文件夹 mkdir:建一个目录    mkdirs :创建是多级目录(推荐)
        System.out.println(flag);
    }
}

 listFiles()方法介绍

 

package com.oracle.demo01;
//listFiles()方法
import java.io.File;

public class Demo04 {
    public static void main(String[] args) {
        method03();
    }
    public static void method01(){
        File file=new File("f:\java");
//        获取该路径下的文件和文件夹
        String[] arr=file.list();
//        遍历
        for(String s:arr){
            System.out.println(s);//显示所有文件名字
        }
    }
//    获得数组
    public static void method02(){
        File file=new File ("f:\java");
//        获取该路径下的文件和文件夹所对应的文件对象
        File[] files=file.listFiles();
        for(File f:files){
            System.out.println(f);
        }
    }
    public static void method03(){
        File file=new File ("f:\java");
//        获取该路径下的文件和文件夹所对应(括号内是条件=某个类型)的文件对象
        File[] files=file.listFiles(new MyFileFileter());
        for(File f:files){
            System.out.println(f);//绝对路径:根本方法
        }
    }    
}


注意
1.指定必须是目录,不然会空指针
出现NullPointerException
2.指定的文件夹必须存在

文件过滤器

FileFilterFilenameFilter都是接口

package com.oracle.demo01;
//过滤器
import java.io.File;
import java.io.FileFilter;

public class MyFileFileter implements FileFilter{  //实现类

    @Override
    public boolean accept(File pathname) {
//        获取文件名
        /*String filename=pathname.getName();
//        判断文件名是否以.txt 结尾
        boolean flag=filename.endsWith(".txt");//因为上一行返回值是String,所以可以用String的方法
        return flag;*/
//        上面代码繁琐,可以用下面一行代码表示
        return pathname.getName().endsWith(".txt");
    }

}

pm

递归 :自己调用自己

原理图

 

package com.oracle.demo02;
//递归
public class Digui {
    public static void main(String[] args) {
        int sum=get(100);
        System.out.println(sum);
    }
//    用递归计算1-100的和
//    100+(1100-1)+(99-1)+(98-1)+...1

    public static int get(int num){
        if(num==1){
            return 1;
        }
        return num+get(num-1);
    }
}
package com.oracle.demo02;

import java.io.File;

public class Digui2 {
    public static void main(String[] args) {
        File file=new File("f:\java");
        look(file);
    }
    public static void look(File file){
//        获取该路径所有文件和文件夹
        File[] files=file.listFiles(new MyFilter());//获得.txt文件和目录
//        遍历
        for(File f:files){
//            判定如果是文件夹继续寻找
            if(f.isDirectory()){ //
                look(f);
            }else{    //不是文件夹就打印
                System.out.println(f);
            }            
        }
    }
}
package com.oracle.demo02;

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

public class MFilter implements FileFilter{

    @Override
    public boolean accept(File pathname) {
//        获取以后缀是.txt的文件,如果是文件夹,那么放到File[]数组内
        if(pathname.isDirectory()){
            return true;
        }
        return pathname.getName().endsWith(".txt");
    }
}

注意

1、递归要有条件限定,够停下来,否则栈内溢出

2、虽然有条件限定,但次数不能太多

3、构造方法不能递归

原文地址:https://www.cnblogs.com/zs0322/p/11022739.html