博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-08-20内容IO流中的File类+文件过滤器FileFilter+递归
阅读量:4648 次
发布时间:2019-06-09

本文共 10471 字,大约阅读时间需要 34 分钟。

 

 

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");

     }

}

转载于:https://www.cnblogs.com/postgredingdangniu/p/9505983.html

你可能感兴趣的文章
[Leetcode]141. Linked List Cycle
查看>>
redis结合springboot 无法注入redisTemplate问题
查看>>
课后作业2
查看>>
jQuery插件库常用前端库引用地址
查看>>
Python入门系列(1):如何使用Sublime text开发Python
查看>>
【四】php字符串操作
查看>>
java 注解的使用
查看>>
2013年蓝桥杯模拟赛答案
查看>>
JAVA中CLASS.FORNAME的含义
查看>>
(转)script标签到底该放在哪里
查看>>
如何找到需要的rpm包
查看>>
SCOPE_IDENTITY和@@identity的区别
查看>>
Navicat连不上Ubuntu?
查看>>
/*携程面试*/四个数组,都已经排好序,找出四个数组的交集
查看>>
数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
查看>>
查找searching
查看>>
【Linux开发】linux设备驱动归纳总结(四):2.进程调度的相关概念
查看>>
矩阵快速幂 斐波那契数列
查看>>
java重写equals和hashCode方法
查看>>
索引的概述与创建
查看>>