4. linux调用文件计算阶乘前n项和_【Java视频教程】day33-文件过滤器??

10a0eeafadafd23e38a5eb0bdcf0d659.png

文件过滤器

文件过滤器介绍

文件过滤器介绍:

过滤,就是把不需要的东西去掉,保留需要的东西;

过滤器,就是能够实现过滤功能的工具;

文件过滤器,就是能够过滤文件的工具,可以根据指定规则滤掉不需要的文件和文件夹,留下需要的文件和文件夹;

在Java中,和文件过滤功能有关的主要有两个接口:FilenameFilter和FileFilter;

FileFilter:文件或文件夹对象过滤器。

FilenameFilter:文件名或文件夹的名称过滤器。

FileFilter接口

3726703a8e22d915ffa516e8be72ecbc.png

需求:使用过滤器获取一个文件夹里面的所有子文件夹;

f9f6eb2455d6781dc6554484111a5bce.png
b6c3a3c795d7eb414d9f2dfada502822.png
https://www.zhihu.com/video/1072878346425208832

FilenameFilter接口

c5de5013dd5709931c31d51812340a2c.png

需求:获取指定文件夹中的所有Java文件;

624290251c846bdf49678f865fa2129f.png

抽取通用过滤器,从文件夹中过滤需要后缀的文件:

/**
bde8885e79ccfbd03f0741736ab12352.png
https://www.zhihu.com/video/1072878736957005824
8cd58498373f6c659d59aff6175e1e16.png
https://www.zhihu.com/video/1072878768141647872

递归

需求:输出指定文件夹及其子文件夹中的所有java文件;

思考:

1、根据题目要求,需要首先列举指定文件夹,得到里面所有的子文件夹和.java为后缀的子文件;

2、然后遍历第一步中得到的所有文件夹和文件,判断是文件还是文件夹;如果是文件,一定都是Java文件,可以直接输出;

如果是文件夹,就是子文件夹,需要拿子文件夹作为指定文件,通过过滤器列举里面所有子文件夹和以.java为后缀的子文件;

不断重复上面两个步骤
967fce27ddfa95d5a473fed9c3cc014a.png
https://www.zhihu.com/video/1072878820134244352

递归简介

递归,就是函数直接或间接的调用自身;

直接递归:自函数中直接调用自身;

public  

间接递归:多个函数之间相互调用,形成闭环调用;如,A函数调用B函数,B函数调用C函数,……最后一个函数又调用A函数;

6f2455b65b4c8e29882f2178b8ed9d9b.png

从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事:

递归简单应用

练习:求5的阶乘;

n的阶乘:n*(n-1)*(n-2)……*1;

84f0d9630b56571ae24a47069f941c04.png

递归的内存原理

9b9508d822f4f72d62a767b285e96bfd.png

递归的注意事项

  1. 使用递归,必须有一个终止条件
  2. 递归次数不能太多

有时即使设置了递归终止条件,但如果递归次数太多,仍然会出现栈内存溢出的问题:

总结:使用递归时必须注意两点:

  1. 递归要有结束条件;
  2. 递归的次数不能过多;

递归练习

需求:传说有一个农场,养了一对兔子,兔子从第三个月开始每个月都会生下一对小兔子;

每对小兔子长到第三个月,都会再生一对小兔子;

假设兔子都不会死;

问:第n个月,农场有多少对兔子?

这个问题实际上就是求斐波拉契数列第n项的值的问题;

  1. 1 2 3 5 8 13 21 34……

规律是:

  1. 第二项都是1,;从第三项开始,每一项都是前面两项的和;

f(n) = f(n-1) + f(n-2)

81a5cfa47ad449fc3542d89a93d84f28.png
a834a30574af0d10431712ac884b380e.png
https://www.zhihu.com/video/1072879115572531200

需求:删除指定文件夹;

思考:因为如果文件夹中有内容,不能直接删除,必须先删除文件夹里面的内容,然后才能删除这个变成空文件夹的文件夹;

步骤:

  1. 列举目标文件夹,获取文件夹中所有子文件和子文件夹;
  2. 遍历处理这些子文件和子文件夹:
    1. 如果是子文件,就直接删除;
    2. 如果是文件夹,就递归调用自身,将这个子文件夹作为新的目标文件夹处理
public 
2d5c9097f5cd739d1e50b303a8a92db6.png
https://www.zhihu.com/video/1072879306694242304

今日小结:

IO介绍:

IO:input和output的缩写;input,表示将数据读进内存;output,表示将数据写出内存;

IO技术:用来实现程序内存和其它地方之间进行数据交换的技术;

数据持久化:将数据从内存中输出到持久化设备上(如硬盘、光盘等),使其能够长久的保存;

File类

在Java中,使用File类描述文件和文件夹;只要操作文件或者文件夹,都应该找File类;

File类只能操作文件,不能操作文件中的数据;要操作里面的数据,需要使用IO流;

一个File类的对象表示硬盘上的一个文件或文件夹对象(不一定真实存在);

File类的功能主要可分为

构造方法:

File(String pathname):根据一个路径得到File对象

File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

创建功能:

public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

获取方法:

public String getAbsolutePath(): 获取绝对路径

public String getPath(): 获取相对路径

public String getName(): 获取名称

public long lastModified(): 获取最后一次的修改时间,毫秒值

判断方法:

public boolean isDirectory(): 判断是否是目录

public boolean isFile(): 判断是否是文件

public boolean exists(): 判断是否存在

修改方法:

public boolean renameTo(File dest):重新命名此抽象路径名表示的文件

public boolean setLastModified(long time):设置此抽象路径名指定的文件或目录的最后一次修改时间。

删除方法:

public boolean delete():删除文件或者文件夹

列举方法:

public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组

public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组

public static File[] listRoots(): 获取系统中所有磁盘的根目录;

文件过滤器

用来在列举文件夹中的子文件和子文件夹时,根据指定规则过滤掉不需要的,保留符合规则的文件;

表示文件过滤器的接口有两个:

FilenameFilter:

过滤方法:如果儿子的对象能在父目录中存在,就返回true,否则false

boolean aceept(File dir, String name){

//dir:父目录

//name:儿子的名称

}

FileFilter:

过滤方法:如果参数表示的File对象能保留,就返回true,否则false

boolean aceept(File pathname){

// pathname : 要过滤的File对象

递归

一个函数直接或间接的调用自身,称为递归;

使用递归需要注意:

  1. 递归必须有一个终止条件,否则就是递归无法结束,会出现栈内存溢出;
  2. 递归的次数不能太多,否则递归一样栈内存溢出;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值