本文共 4292 字,大约阅读时间需要 14 分钟。
目录
一、File类
1.File类的作用
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
2.File类的构造
public File(String pathname)
public File(String parent, String child)
public File(File parent, String child)
注意:
1. 一个File对象代表硬盘中实际存在的一个文件或者目录。
2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
3.相对路径和绝对路径的概念
绝对路径:从盘符开始的路径,这是一个完整的路径。
相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
4.获取方法
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :返回此File的路径名字符串。(只能获取文件的大小,对于文件夹来说大小是不确定的)
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
5.判断方法
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
在开发中必须先判断是否存在,在判断是否是文件夹或文件
6.创建删除方法
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。(文件夹里面有文件时无法删除)
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
7.遍历目录的方法(*****)
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
二、递归
1.什么是递归?
在方法内部调用自己
2.目录搜索案例
public static void main(String[] args) { File file = new File("F:/黑马程序员"); searchFile(file, "txt");}public static void searchFile(File file, String name) { //参数非空判断 Objects.requireNonNull(file); Objects.requireNonNull(name); //方式1:匿名内部类 /*File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith("." + name)||pathname.isDirectory(); } });*/ //方式2:Lanbda表达式 if (file.exists()) { File[] files = file.listFiles((pathname) -> { return pathname.getName().endsWith("." + name) || pathname.isDirectory(); }); //递归调用 for (File f : files) { if (f.isDirectory()) { searchFile(f, name); } else { //打印文件名 System.out.println(f.getName()); } } }}
3.批量修改文件名案例
File file = new File("F:/黑马程序员/就业班/day08-File类、递归/文件重命名案例");if(file.exists()){ File[] files = file.listFiles(); for (File file1 : files) { String filename = file1.getName(); int i = filename.indexOf("_"); int y = filename.lastIndexOf("_"); filename = filename.substring(i + 1, i + 4) + filename.substring(y + 1); System.out.println(file1.renameTo(new File(file, filename))); }}
4.获取文件夹大小案例
描述:从键盘接收一个文件夹路径,获得该文件夹大小并输出到控制台。
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入文件夹路径"); String fileName = sc.next(); File f = new File(fileName); System.out.println(getFileSize(f)); } public static long getFileSize(File file) { long length = 0; Objects.requireNonNull(file); if (file.exists()) { File[] files = file.listFiles(); for (File file1 : files) { if (file1.isDirectory()) { length += getFileSize(file1); } else { length += file1.length(); } } return length; } else { return 0; } }
5.猴子吃桃子问题
描述:猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了快一半,还不过瘾,又多吃了一个。第二天又将仅剩下的桃子吃掉了一半,又多吃了一个。以后每天都吃了前一天剩下的一半多一个。到第十天,只剩下一个桃子。试求第一天共摘了多少桃子? //1534
public static void main(String[] args) { System.out.println(getNum(10)); } public static int getNum(int n){ if(n==1){ return 1; }else{ return (getNum(n-1)+1)*2; } }
6.斐波那契数列
描述:
用递归实现不死神兔
故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。
在他的一部著作中提出了一个有趣的问题:假设一只刚出生的小兔一个月后就能长成大兔,
再过一个月(也就是第三个月)就能生下一只小兔,并且此后每个月都生一只小兔,没有发生死亡,
问:现有一只刚出生的兔子2年后(24个月)会有多少只兔子?
分析:
从第一个兔子开始,第1个月1只兔子,由于长到第三个月后每个月又生一只兔子,所以第2个月也是1只兔子,第3个月时可以生一只兔子,所以总数为2只,这时,其中有一只是以后每个月都可以生一只兔子的老兔子,另一只是一只新兔子,它只有在第三个月的时候才可以每个月生一只兔子;这样的话,第4个月的兔子总数为3只,…以此类推,从第1个月到第24个月的兔子总数分别为:1,1,2,3,5,8,13,21,34,55,89,144...
public static void main(String[] args) { for (int i = 1; i <= 15; i++) { System.out.println(getNum(i)); } } public static int getNum(int month){ if(month==1||month==2){ return 1; }else{ return getNum(month-2)+getNum(month-1); } }
转载地址:https://yfy1995.blog.csdn.net/article/details/82117490 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!