zoukankan      html  css  js  c++  java
  • 2018-08-20内容IO流中的File类+文件过滤器FileFilter+递归

    IO流编程:

    要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘或者U盘等)上!

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

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

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

    File类的出现:

    File文件和目录路径名的抽象表示形式!即Java中把文件或者目录(文件夹)都封装成File对象!也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可!

    File类的构造函数:

    越细分越灵活:

       传一个父对象,后面传路径!

       传入对象的路径(绝对路径针对于全电脑的,相对路径相对于工程内部)!

       传入父级路径,后面传入子路径!

     

    File类的获取:

    ①   getPath()拿到路径(即toString方法)!

    ②   返回文件或者文件夹的字节数大小!

    ③   getName()拿到文件名或者文件夹名!

    文件或者文件夹的创建或删除:

    ListFile()方法:

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

    1;指定的目录必须是存在的!

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

    课堂代码:

    package com.oracle.demo01;
    import java.io.File;
    import java.io.IOException;
    //file类包含:
    //1:路径path
    //2:目录directory-->文件夹
    //3:文件file
    //Windows系统是;号,Linux系统是:号路径分隔符!
    //Windows系统是号,Linux系统是/号名称分隔符!
    public class Demo01 {
        public static void main(String[] args){
            method10();
        }
        public static void method1() {
            //与系统有关的路径分隔符:
            System.out.println(File.pathSeparator);
            //与系统有关的名称分隔符:
            System.out.println(File.separator);
        }
        
        public static void method2(String Child) {
            //两个\是转义符!
            //实际的路径转化成一个抽象的对象!
            //File类构造方法不会检验该文件或该文件夹是否真实存在!
            //绝对路径!
            File file1=new File("F:\IOTest\TestA.txt");
            //传参:
            File file2=new File("F:",Child);
            File file3=new File(new File("F:\IOTest"),Child);
            System.out.println(file2);
        }
        public static void method3() {
            File file1=new File("F:\IOTest\TestA.txt");
            //拿到File对象的绝对路径:
            System.out.println(file1.getAbsolutePath());
            //相对路径拿到的是本工程的路径:
            File file2=new File("src");
            System.out.println(file2.getAbsolutePath());
        }
        public static void method4() {
            //获取本路径目录名或者文件名:
            File file1=new File("F:\IOTest\TestA.txt");
            System.out.println(file1.getName());
            //getPath和toString方法一个作用:
            System.out.println(file1.getPath());
            //返回文件(针对于文件)的长度Long类型(字节数)
            System.out.println(file1.length());
            //找个大一点的文件来看Length:
            File file2=new File("D:\Program Files\360DrvMgr\feedback\360ScreenCapture.exe");
            System.out.println(file2.length());
        }
        public static void method5() throws IOException {
            //创建文件(只能创建文件,不能创建文件夹):
            File file1=new File("F:\IOTest\TestB.txt");
            boolean IsSucc=file1.createNewFile();
            System.out.println(IsSucc);
        }
        public static void method6() throws IOException {
            //创建文件夹:
            File file1=new File("F:\IOTest\TestDir");
            //mkdirs多级目录,mkdir单级目录!
            boolean IsSucc=file1.mkdirs();
            System.out.println(IsSucc);
        }
        public static void method7() {
            File file1=new File("F:\IOTest\TestB.txt");
            //删除该文件夹(或文件),直接从硬盘删除,不走回收站,删除需谨慎:
            boolean IsSucc=file1.delete();
            System.out.println(IsSucc);
        }
        public static void method8() {
            File file1=new File("F:\IOTest\TestB.txt");
            //先判断file对象表示文件或文件夹是否真实存在:
            boolean flagex=file1.exists();
            //判断file对象是否是一个目录:
            boolean flagdi=file1.isDirectory();
            //判断file对象是否是一个文件:
            boolean flagfi=file1.isFile();
        }
        public static void method9() {
            //获取该文件夹下所有文件或文件夹的字符串名称:
            File file1=new File("F:\IOTest");
            //存进String数组:
            String[] files=file1.list();
            //增强for遍历:
            for(String Str:files) {
                File file=new File(file1,Str);
                if(file.getName().equals("TestA.txt")) {
                    boolean flag=file1.delete();
                    System.out.println(flag);
                }
            }
        }
        public static void method10() {
            //返回File[]的listFiles()方法:
            File file1=new File("F:\IOTest");
            File[] files=file1.listFiles();
            //对象或者容器去调用方法,如果为NULL,会报空指针异常!
            for(File Str:files) {
                System.out.println(Str);
            }
        }
    }

    上午作业1:

    package com.oracle.homework;
    import java.io.File;
    public class HW1 {
        public static void main(String[] args) {
            //调用统计文件大小的方法:
            getSize("F:\GameDownload\LOL_V4.1.0.1_FULL.exe");
        }
        //统计文件大小的方法:
        public static void getSize(String fileName) {
            File file=new File(fileName);
            boolean flag=file.exists();
            if(flag) {
                boolean IsFi=file.isFile();
                if(IsFi) {
                    System.out.println(file.length());
                }else {
                    System.out.println("这不是一个文件,请重新输入!");
                }
            }else {
                System.out.println("该文件不存在,请重新输入!");
            }
        }
    }

    上午作业2:

    package com.oracle.homework;
    import java.io.File;
    public class HW2 {
        public static void main(String[] args) {
            //调用方法:
            deleteDir("F:\IOTest");
        }
        //定义删除文件夹的方法:
        public static void deleteDir(String dirName) {
            File file=new File(dirName);
            boolean flag=file.exists();
            if(flag) {
                boolean IsDir=file.isDirectory();
                if(IsDir) {
                    //将内部文件都存进File数组:
                    File[] fileArr=file.listFiles();
                    if(fileArr!=null) {
                        //遍历把该文件夹下内容都删掉:
                        for(File Str:fileArr) {
                            Str.delete();
                            System.out.println("该文件夹内部文件:"+Str+"删除成功!");
                        }
                        boolean IsSucc=file.delete();
                        String Mess=(IsSucc?"删除文件夹成功!":"删除文件夹失败!");
                        System.out.println(Mess);
                    }else {
                        boolean IsSucc=file.delete();
                        String Mess=(IsSucc?"删除文件夹成功!":"删除文件夹失败!");
                        System.out.println(Mess);
                    }
                    System.out.println();
                }else {
                    System.out.println("这不是一个文件夹,请重新输入!");
                }
            }else {
                System.out.println("该文件夹不存在,请重新输入!");
            }
        }
    }

    文件过滤器:

    //该方法有点过时了:可以使用listFiles(FileFilter filter)返回一个File[]数组,然后通过实现FileFilter接口的类重写accept方法,来进行筛选!

    递归:

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

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

    ②   间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法!

    注意:递归一定要有条件限定,保证递归能够停止下来(留有程序的出口),否则会发生栈内存溢出,在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出!

    课堂示例代码1:

    package com.oracle.demo01;
    import java.io.File;
    //Windows不区分大小写!
    public class Demo02 {
        public static void main(String[] args) {
            File file=new File("F:\IOTest");
            //listFilter调用MyFilter内的accept过滤器:
            File[] files=file.listFiles(new MyFilter());
            for(File Str:files) {
                System.out.println(Str);
            }
        }
    }
    
    package com.oracle.demo01;
    import java.io.File;
    import java.io.FileFilter;
    //实现文件过滤器FileFliter:
    public class MyFilter implements FileFilter {
        public boolean accept(File pathname) {
            //返回.java文件结尾的文件:
            //String name=pathname.getName().toLowerCase();
            //boolean flag=name.endsWith(".java");
            //return flag;
            return pathname.getName().toLowerCase().endsWith(".java");
        }
    }

    递归的演示:

    package com.oracle.demo01;
    import java.io.File;
    //获取某目录下所有的文件:
    public class Demo03 {
        public static void main(String[] args) {
            File file=new File("F:\IOTest");
            getAllFiles(file);
        }
        //递归:自己调用自己!
        public static void getAllFiles(File file) {
            File[] files=file.listFiles();
            for(File Str:files) {
                if(Str.isDirectory()) {
                    getAllFiles(Str);
                }else {
                    System.out.println(Str);
                }
            }
        }
    }

    递归求1-N的和:

    package com.oracle.demo01;
    public class Demo04 {
        //递归:要运行的方法主体不变,而参与运行的方法参数会变!
        //递归必须要写一个程序的出口,否则该程序没有意义!
        public static void main(String[] args) {
            //getNum(100);
            System.out.println(getNum(100));
        }
        //用递归计算1-100的和:
        //一直调用,直到有值为止,再返回去!
        public static int getNum(int num) {
            if(num==1) {
                //return返回给调用者
                return 1;
            }
            return num+getNum(num-1);
        }
    }

    递归寻找文件夹中.java结尾的文件(含子目录):

    package com.oracle.demo01;
    import java.io.File;
    //挑选.java文件,包含子目录:
    public class Demo05 {
        public static void main(String[] args) {
            getAllFile(new File("F:\IOTest"));
        }
        public static void getAllFile(File file) {
            File[] files=file.listFiles(new YourFilter());
            for(File Str:files) {
                if(Str.isDirectory()) {
                    getAllFile(Str);
                }else {
                    System.out.println(Str);
                }
            }
        }
    }
    
    package com.oracle.demo01;
    import java.io.File;
    import java.io.FileFilter;
    public class YourFilter implements FileFilter {
        public boolean accept(File pathname) {
            //是文件夹直接return true!
            if(pathname.isDirectory()) {
                return true;
            }
            return pathname.getName().toLowerCase().endsWith(".java");
        }
    }

    下午作业1:

    package com.oracle.homework;
    import java.util.Scanner;
    //用户输入数字N,求出N的阶乘!
    public class HW3 {
        public static void main(String[] args) {
            System.out.println("请输入一个数字:");
            @SuppressWarnings("resource")
            Scanner Scan=new Scanner(System.in);
            int Num=Scan.nextInt();
            System.out.println(Num+"的阶乘为:"+getNFactorial(Num));
        }
        public static int getNFactorial(int Num) {
            if(Num==1) {
                return 1;
            }
            return Num*getNFactorial(Num-1);
        }
    }

    下午作业2:

    package com.oracle.homework;
    import java.io.File;
    //搜索指定目录中的.java文件(含子目录):
    public class HW4 {
        public static void main(String[] args) {
            //调用getAllJava方法:
            getAllJava(new File("F:\IOTest"));
        }
        public static void getAllJava(File file) {
            File[] files=file.listFiles(new OurFilter());
            for(File Str:files) {
                if(Str.isDirectory()) {
                    getAllJava(Str);
                }else {
                    System.out.println(Str);
                }
            }
        }
    }
    
    package com.oracle.homework;
    import java.io.File;
    import java.io.FileFilter;
    //实现FileFilter接口并重写accept方法:
    public class OurFilter implements FileFilter {
        public boolean accept(File pathname) {
            if(pathname.isDirectory()) {
                return true;
            }
            return pathname.getName().toLowerCase().endsWith(".java");
        }
    }

    package com.oracle.homework;

    import java.io.File;

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

    public class HW4 {

         public static void main(String[] args) {

             //调用getAllJava方法:

             getAllJava(new File("F:\IOTest"));

         }

         public static void getAllJava(File file) {

             File[] files=file.listFiles(new OurFilter());

             for(File Str:files) {

                  if(Str.isDirectory()) {

                       getAllJava(Str);

                  }else {

                       System.out.println(Str);

                  }

             }

         }

    }

     

    package com.oracle.homework;

    import java.io.File;

    import java.io.FileFilter;

    //实现FileFilter接口并重写accept方法:

    public class OurFilter implements FileFilter {

         public boolean accept(File pathname) {

             if(pathname.isDirectory()) {

                  return true;

             }

             return pathname.getName().toLowerCase().endsWith(".java");

         }

    }

  • 相关阅读:
    css换行
    VC include 路径解析 冷夜
    DirectxDraw学习笔记 冷夜
    winmain窗口代码 冷夜
    DirectDraw 常用功能代码记录 冷夜
    C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free 冷夜
    BMP文件结构 冷夜
    管道流
    打印流
    字符编码
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9505983.html
Copyright © 2011-2022 走看看