黑马程序员技术交流社区
标题:
【石家庄校区】就业班_JavaSE_day09_File类及递归思想
[打印本页]
作者:
风中的消逝
时间:
2018-4-23 14:47
标题:
【石家庄校区】就业班_JavaSE_day09_File类及递归思想
本帖最后由 小石姐姐 于 2018-4-24 17:07 编辑
就业班_JavaSE_day09_File类及递归思想
一 File类
- 表示文件和目录
- 构造方法
- File File(String pathname): 使用指定的路径名创建一个File对象.
- File File(File parent, String child): 根据指定的父目录File对象和路径名创建File对象
注意:new只创建了File对象, 不会在磁盘上创建 ; 最后是创建目录还是文件是根据创建方法来决定的;
一般用相对路径,相对于工程目录;. 表示工程目录。
- 常用成员方法
- 创建:
- boolean createNewFile(): 新建一个文件
- boolean mkdir(): 新建一个目录
- boolean mkdirs(): 新建多层目录, 级联创建。
- 注意: 创建目录就只创建目录, 不会创建文件. 即使有a.txt也会把他作为目录名创建目录
- 删除
- boolean delete(): 删除文件或目录. 注意: 删除是永久删除, 回收站没有
- 获取
- String getName(): 获取文件名或目录名(不含上层目录)
- long length(): 获取文件的大小, 单位byte 注意: 不能用来返回一个目录的大小。
- String[] list(): 获取当前路径下所有文件和目录名称. File对象必须是目录。
- File[] listFiles(): 获取当前路径下的所有文件和目录的File对象. File对象必须是目录。
- 判断
- boolean exists(): 判断文件或目录是否存在
- boolean isDirectory(): 判断该File对象是否为目录
- boolean isFile(): 判断该File对象是否为文件
- boolean isHidden(): 判断该文件或目录是否为隐藏的
- 修改
- boolean renameTo(File dest): 重命名文件或者目录。
* 递归
* 原理: 将大的问题拆分为小问题, 再将小问题拆分为更小的问题, 解决了最小的问题后, 更大的问题也可以解决, 最终整个问题得到解决
* 在代码中指的是方法自己调用自己
* 注意事项
* 递归必须有出口, 否则内存溢出 StackOverFlowError
* 递归次数不能太多, 否则也会内存溢出
* 补充: 递归和循环的相互转换
* 递归都可以转换为循环实现
* 循环不一定能转换为递归
1 求N的阶乘 n! = n * (n-1) !
2 不死神兔 f(n) = f(n-1) + f(n-2)
3 求文件夹大小 文件夹大小 = 所有子文件夹大小+ 所有子文件大小
4 统计文件夹(包含子文件夹)中,每种类型的文件及个数。 返回值可以定义成一个Map<文件类型,个数> 比较二个Map 如果key相同,累加value,如果可以不同,取并集。
5 统计文件夹(包含子文件夹)中,扩展名为.java的所有文件名称, 返回值可以定义为一个List<文件名称>
如果要求返回的文件名称不重复的话 返回值可以定义为一个Set<文件名称>
涉及到返回值的递归,需要考虑返回值类型,根据不同需求来定义接受返回值的类型,然后根据返回值类型来确定变量是放在方法外,还是放在方法内。
6 删除文件夹 删除文件夹 = 删除所有子文件夹 + 删除所有子文件夹
7 复制文件夹 复制文件夹 = 复制所有子文件夹 + 复制所有子文件
8 汉诺塔 移动N个盘子 从X柱子到Z柱子,借助Y柱子。
1 移动N-1个盘子从X柱子到Y柱子,借助Z柱子
2 移动N盘子从X柱子到Z柱子
3 移动N-1个盘子从Y柱子到Z柱子,借助X柱子
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2