• File类、文件过滤器、递归、文件及文件夹的操作方法


    一、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");
        }
    }
  • 相关阅读:
    java学习day51--DB旅游生态系统-项目搭建
    java学习day50--Spring Boot发送邮件任务
    java学习day49--yaml语法以及注入
    java学习day49--JSON扩展(详细)
    java学习day49--JS数组遍历
    java学习day49-基于AJAX实践操作(活动模块)
    java学习day48--Ajax技术--原生
    denied: requested access to the resource is denied
    VMware虚拟机网络适配器三种网络连接模式
    MySQL8.0.19最新版本rpm包和源码包百度地址
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/10248138.html
Copyright © 2020-2023  润新知