一、File

Io概述:

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

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

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

File类的构造函数:

 

文件及文件夹的一系列操作方法:

 listFiles()方法9-10

代码实现:

package com.oracle.io;

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

//File 类包含
//1.路径 path  e:\\java_code\\day22e\\hello.java
//2.目录 directory   文件夹
//3.文件 file
public class Demo01 {
    public static void main(String[] args) throws IOException {
        /*method2();
        method3();
        method4();
        method5();
        method6();
        method7();
        method8();
        method9();*/
        method10();
    }
    public static void method1(){
        //与系统有关的路径分隔符win ; Linux :
                System.out.println(File.pathSeparator);
                //与系统有关的名称分隔符win \ Linux /
                System.out.println(File.separator);
    }
    public static void method2(){
        //File类构造方法不会给你检验这个文件或者文件夹是否真实存在
        //File file=new File("X:\\test\\a.txt");
        //File file=new File("X:","test");
        File f1=new File("X:\\test");
        File file=new File(f1,"a.txt");
        System.out.println(file);
    }
    public static void method3(){
        //File file=new File("X:\\test\\a.txt");
        File file=new File("src");
        //相对路径走的是本工程路径
        System.out.println(file.getAbsolutePath());
        
    }
    public static void method4(){
        //获取本路径目录名或者文件名
        File file=new File("X:\\test\\a.txt");
        System.out.println(file.getName());
        //getPath()和toString()一个作用
        System.out.println(file.getPath());
        //返回文件的长度long(字节数)
        System.out.println(file.length());
    }
    public static void method5() throws IOException{
        //创建文件(只能创建文件不能创建文件夹)
        File file=new File("X:\\test\\b.txt");
        boolean flag=file.createNewFile();
        System.out.println(flag);
    }
    public static void method6(){
        //创建文件夹(不能创建文件)
        File file=new File("X:\\test\\e\\f");
        //boolean flag=file.mkdir();//单级目录
        boolean flag=file.mkdirs();//多级目录
        System.out.println(flag);
    }
    public static void method7(){
        //删除文件或文件夹
        //直接从硬盘上删除,不走回收站
        //删除需谨慎
        File file=new File("X:\\test\\b.txt");
        boolean flag=file.delete();
        System.out.println(flag);
    }
    public static void method8(){
        File file=new File("X:\\test\\a.txt");
        //判断file对象表示的文件或文件夹是否真实存在
        //boolean flag=file.exists();
        //判断是否是文件夹
        //boolean flag=file.isDirectory();
        //是否是文件
        boolean flag=file.isFile();
        System.out.println(flag);
    }
    public static void method9(){
        File file=new File("X:\\test");
        //获取此路径下所有的文件或文件夹的字符串名称
        String[] files=file.list();
        for(String s:files){
            File f1=new File(file,s);
            if(f1.getName().equals("a.txt")){
                f1.delete();
            }
        }
    }
    public static void method10(){
        File file=new File("X:\\test");
        File[] files=file.listFiles();
        for(File f:files){
            System.out.println(f);
        }
    }
}

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

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

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

文件过滤器:

package com.oracle.io;

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

public class MyFilter implements FileFilter{


    public boolean accept(File pathname) {
    /*    String name=pathname.getName().toLowerCase();
        boolean flag=name.endsWith(".java");*/
        return pathname.getName().toLowerCase().endsWith(".java");
    }

}

import java.io.File;

public class Demo02 {
    public static void main(String[] args) {
        File file=new File("x:\\test");
        File[] files=file.listFiles(new MyFilter());
        for(File f:files){
            System.out.println(f);
        }
    }
}

图解:

有参:

当listFile获取路径时,会调用accept方法,然后把路径传过去,运行accept方法,如果返回true,则存进

File数组中,反之;如果返回false,就不存;最后遍历输出结果。

无参:

import java.io.File;

//获取某目录下所有的文件
public class Demo03 {

    public static void main(String[] args) {
        File file=new File("x:\\test");
        getAllFile(file);

    }
    public static void getAllFile(File file){
        //获取该目录下的文件及文件夹
        File[] files=file.listFiles();
        //遍历
        for(File f:files){
            if(f.isDirectory()){
                getAllFile(f);
            }else{
                System.out.println(f);
            }
        }
    }
}

文解:

创建一个File数组,调用无参方法;进行遍历,先进行判断,如果f是文件夹的话,则遍历到它的子目录,

讲子目录下的文件存入数组,反之打印遍历到的所有文件。

 

 递归

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。

举例:

public class Demo04 {
    //递归:要运行的方法主体不变,而参与运行的方法参数会变
    //递归必须要写一个程序出口,否则该程序没有意义
    public static void main(String[] args) {
        getNum(3);
    }
    //计算1-100的和,用递归做
    public static int getNum(int n){
        if(n==1){
            return 1;
        }
        return n+getNum(n-1);
    }

}

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

public class YourFilter implements FileFilter{

    public boolean accept(File pathname) {
        //如果是文件夹,则不进行过滤,认为满足条件加到File数组中
        if(pathname.isDirectory()){ 判断是否是文件夹
            return true;  是则不过滤并存入数组
        }else{
            return pathname.getName().toLowerCase().endsWith(".java"); 反之打印带有.java后缀的文件
        }
    }

}
public class Demo05 {

    public static void main(String[] args) {
        File file=new File("x:\\test");
        getAllFile(file);

    }
    public static void getAllFile(File file){
        File[] files=file.listFiles(new YourFilter());
        for(File f:files){
            if(f.isDirectory()){  判断是否是文件夹
                getAllFile(f);  显示子目录存入数组
            }else{
                System.out.println(f);  反之打印文件
            }
        }
    }

}

搜索指定目录中的.java文件(含子目录)

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

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