《学习笔记Day18》递归思想以及使用Java实现文件的增删改差

递归概述

1、方法自己调用自己,解决的是一个比较复杂的问题,复杂的问题是基于简单的问题解决的基础上的,经过非常少的步骤,就可以解决这个复杂的问题。方法在自己调用自己的过程中,调用的总体逻辑不变,但是解决问题的规模越来越小(参数越来越小),一直到不需要递归的方式,也到能容易解决这个问题为止,就不需要再进行递归了。
2、递归代码的特点:

(1)方法自己调用自己:总体逻辑不变,但是规模在缩小,由于自己调用自己,所以功能都要单独的定义为一个方法
(
2)方法中的业务逻辑有两个分支:

1)自己调用自己的分支:业务规模还比较大,无法直接解决问题,使用递归

2)不需要自己调用自己的分支:规模已经足够小,小到不需要(不能)使用递归,仅仅一个简单的操作就能完成

(3)每次递归的时候,朝着规模逐渐减小的方向、朝着递归不能进行的方向

在这里插入图片描述

二、File类型

1、File类型:用于表示一个文件或者文件夹的抽象路径
2、路径:用于描述文件或者文件夹所在位置的字符串
3、路径分类:

(1)绝对路径:从根目录开始的路径 1)windows系统:根目录的起始就是盘符 2)Linux系统:/就是根目录,从/开始的路径就是绝对路径
(2)相对路径:相对于某个路径而言,例如相对路径1.txt,之于:【E:\新建文件夹\a\1.txt】和之于【C:\Users\Zihuatanejo\Desktop\1.txt】是不同的两个路径

File类型的构造方法

1、File(String pathname) 将一个字符串表示的路径封装为File对象
2、File(File parent, String child) 将父级路径和子级路径封装成一个File对象,对象中的路径是父级路径加子级路径
3、File(String parent, String child) 将父级路径和子级路径封装成一个File对象,对象中的路径是父级路径加子级路径

public static void main(String[] args) {
	File file1 = new File("E:\\a");
	File file2 = new File(file1, "1.txt");
	System.out.println(file2);
		
	File file = new File("C:", "User");
	System.out.println(file);

File类型的创建方法

1、createNewFile() 当且仅当File对象表示的文件路径的文件不存在时,创建一个新的空文件,如果创建成功就返回true
2、mkdir() 只能创建单个目录。当且仅当File对象抽象路径表示的文件夹不存在的时候,创建文件夹,并且返回true。当要创建的目录所在的父级目录不存在的时候,创建失败
3、mkdirs() 可以创建嵌套目录在创建嵌套目录时,如果父级目录部分或者全部不存在时,都可以完成创建

File file1 = new File("a");//在Eclipse中,所有的相对路径都是相对当前工程而言
File path = new File(file1, "b/c/d");
System.out.println(path.mkdirs());

File类型的删除方法

1、delete() 删除路径指定的文件或者文件夹
2、注意事项:
(1)使用该方法删除的文件夹只能是空文件夹,无法删除非空文件夹
(2)使用该方法删除的内容不走回收

File类型的重命名方法

1、renameTo(File dest) 将调用者对象表示的文件使用参数对象表示的新名称重新命名
2、注意事项:
(1)在同路径下,该方法仅仅是重命名
(2)在不同路径下,该方法是剪切并且重命名

		File file = new File("D:\\a.txt");
		File file1 = new File("U:\\b.txt");
		
		System.out.println(file.renameTo(file1));

File类型的判断功能

1、exists() 测试调用者表示的抽象路径名是否存在
2、isFile() 测试调用者抽象路径表示的文件是否是一个标准文件
3、isDirectory() 测试调用者对象表示的路径是否为一个文件夹

File类型的获取功能

1、getAbsolutePath() 获取当前File表示的内容的绝对路径
2、getName() 获取当前File对象路径表示的文件或者文件夹的名称
3、length() 获取File对象指代的文件的长度(所占字节个数)。注意:该方法只能用于统计文件大小,无法统计文件夹的大小
4、String[] list() 将File对象表示的文件夹下的所有内容的名字装进String[]
5、File[] listFiles() 将调用者对象表示的文件夹下,每一个文件或者文件夹都单独封装为一个File对象,并且放入File[]
6、getPath() 将File对象表示的路径还原回字符串String

获取功能练习

键盘录入一个字符串,该字符串表示一个文件夹路径,如果不是文件夹则重新录入。打印当前文件夹下,所有大于20M的后缀名是.mp4的文件的绝对路径


/**
 * 键盘录入一个字符串,该字符串表示一个文件夹路径,如果不是文件夹则重新录入。
	打印当前文件夹下,所有大于20M的后缀名是.mp4的文件的绝对路径
 * 
 * @author Zihuatanejo
 *
 */
public class Demo10_Exercise {
	
	public static void main(String[] args) {
		File dir = getDir();
		
		//1.我们目前得到了文件夹的路径,可以将文件夹下所有内容逐个转为file对象,便于后期判断
		File[] files = dir.listFiles();
		
		//2.遍历数组获取每一个file对象进行判断
		for (File file : files) {
			
			//3.判断当前对象是否为合法的文件
			if(file.isFile()) {
				//4.获取当前文件的名称
				String fileName = file.getName();
				
				//获取文件后缀名
				//① 获取后缀名的.出现的索引
				int index = fileName.lastIndexOf(".");
				
				//② 截取后缀名
				String suffixName = fileName.substring(index);
				
				//5.判断文件是否为.mp4结尾
				if(suffixName.equals(".mp4")) {
					
					//6.判断当前.mp4文件大小是否大于20M
					if(file.length() / 1024 / 1024 > 100) {
						System.out.println(file.getAbsoluteFile());
					}
				}
			}
		}
		
	}
	
	/**
	 * 判断一个字符串路径是否是合法的文件夹路径
	 * 
	 * @return 表示合法文件夹路径的File对象
	 */
	public static File getDir() {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请录入一个文件夹的路径:");
		
		while (true) {
			String strPath = sc.nextLine();
			
			//1.为了判断字符串是否为合法文件夹路径,要先将字符串路径转为File对象
			File path = new File(strPath);
			
			//2.判断当前的File对象表示的路径是否为合法文件夹
			if (path.isDirectory()) {
				return path;
			} else {
				System.out.println("请录入合法的文件夹路径:");
			} 
		}
	}
}

File和递归的练习



//键盘录入一个文件夹路径,删除该文件夹(文件夹是嵌套文件夹)
public class Demo11_FileAndRecursionExercise {

	public static void main(String[] args) {
		//得到文件夹路径
		File dir = Demo10_Exercise.getDir();
		
		delDir(dir);
	}
	
	public static void delDir(File dir) {
		//1.打开文件夹
		File[] files = dir.listFiles();
		
		//2.获取文件夹中的每一个内容
		for (File file : files) {
			//3.判断每一个内容,如果是文件就直接删除
			if(file.isFile()) {
				file.delete();
			} else {
				delDir(file);
			}a
		}
		
		//5.删除文件夹
		dir.delete();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿福真的不想掉头发

大爷?赏点?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值