File类的创建...递归删除

File类的操作

1.File类

1.1)文件和目录路径名的抽象表示形式

package com.qianfeng.file_01;

import java.io.File;

/**
 * java.io.File
 * 		文件和目录路径名的抽象表示形式。
 * 
 * 构造方法:
 * 	public File(String pathname):里面当前文件夹/文件的路径 (推荐方式)
 *	public File(String parent,String child):parent的字符串路径名和child的字符串路径名构造一个File
 *	public File(File parent,String child):参数1:需要描述parent的字符串路径名和子文件字符串路径名:构造一个File
 * 
 * 
 * URL:这个是URI的子集合(统一资源定位符)
 * 			http://localhost:8080/web/login
 * 
 * URI:(统一资源标识符):/web/login
 * 		网络协议:http://
 * 				https://
 * 				ftp://
 * 				thunder://
 * @author zhangyang
 *
 */
public class FileDemo {
	
	public static void main(String[] args) {
		//描述:D盘下的demo文件夹:D:\demo\a.txt
		//public File(String pathname):里面当前文件夹/文件的路径
		File  file = new File("d:\\demo\\a.txt") ;
		System.out.println(file);//e:\demo\a.txt
		
		System.out.println("------------------------------");
		//描述:d盘下的demo文件夹中的a.txt文件
//		public File(String parent,String child)
		File file2 = new File("d:\\demo\\a.txt") ;
		System.out.println(file2);//E:\demo\a.txt
		
		System.out.println("------------------------------");
		
		//描述:d盘下的demo文件夹中的a.txt文件
		//public File(File parent,String child):
		File file3 = new File("D:\\demo") ;
		File file4 = new File(file3,"a.txt") ;
		System.out.println(file4);//D:\demo\a.txt
		
	}
}

1.2)File类的创建功能

package com.qianfeng.file_01;

import java.io.File;
import java.io.IOException;

/**
 * File类的创建功能:
 * 
 * public boolean createNewFile()throws IOException:创建文件
 * public boolean mkdir():创建目录(文件夹):如果存在该文件夹,返回值false
 * public boolean mkdirs():
 * 			创建目录(文件夹):创建多级目录,如果父目录不存在,会自动创建!
 * 
 * 如果描述文件或者文件夹没有指定盘符,相对路径:默认是当前项目路径下
 * @author zhangyang
 *
 */
public class FileDemo2 {
	
	public static void main(String[] args) throws IOException {
		//需要在D盘下的text目录下创建一个a.txt文件
		//1)描述这个路径:File
		File file = new File("d:\\test\\a.txt") ;
		//创建文件
		//public boolean createNewFile()throws IOException
		System.out.println("createNewFile():"+file.createNewFile());
		//如果要在test目录下创建a.txt文件:File只是在描述路径:那么test目录必须存在!
		
		// public boolean mkdir()
		//d盘下:创建一个test文件夹
		File file2 = new File("d:\\test") ;
		System.out.println("mkdir():"+file2.mkdir());
		
		System.out.println("------------------------------------");
		
		//public boolean mkdirs():
		File file3 = new File("d:\\aaa\\bbb\\ccc\\ddd") ;
		System.out.println(file3.mkdirs());
		
		//创建一个文件:b.txt
		File file4 = new File("b.txt") ; //如果没有描述路径,在当前项目下创建文件:所处的相对路径
		System.out.println(file4.createNewFile());
		
		File file5 = new File("aaa\\bbb\\ccc\\ddd") ;
		System.out.println(file5.mkdirs());
		
	}
}

1.3)File类的删除功能

package com.qianfeng.file_01;

import java.io.File;

/**
 * File类的删除功能
 * 		public boolean delete():删除目录/文件,
 * 如果删除的是目录,那么前提条件:目录必须为空
 * 
 * 
 * @author zhangyang
 *
 */
public class FileDemo3 {
	
	public static void main(String[] args) {
		
		//删除当前项目下的b.txt文件
		//描述b.txt文件
		File file = new File("b.txt") ;
		//System.out.println(file);
		
		//public boolean delete()
		System.out.println("delete():"+file.delete());
		System.out.println("-------------------");
		
		//删除当前项目aaa这个目录
		File file2 = new File("aaa\\bbb\\ccc\\ddd") ;
		System.out.println(file2.delete());
		
		//删除demo文件夹
		//File file3 = new File("demo\\a.txt") ;
		//System.out.println(file3.delete());
		File file4 = new File("demo") ;
		System.out.println(file4.delete());
		
	}
}

1.4)File类重命名功能

package com.qianfeng.file_01;

import java.io.File;

/**
 * 重命名功能:
 * 针对某个文件操作
 * public boolean renameTo(File dest):
 * 
 * 需求:将当前项目下的高圆圆.jpg --- 杨桃.jpg  
 * 
 * 情况1:
 * 		当前文件的路径和该名后的路径相同,仅仅是改名字
 * 
 * 情况2:
 * 		当前文件的路径名和该后面的路径名不相同,剪切并重命名
 * 
 * @author zhangyang
 *
 */
public class FileDemo4 {
	
	public static void main(String[] args) {
		
		//描述下当前项目下的高圆圆.jpg
		//情况1:当前文件的路径和该名后的路径相同,仅仅是改名字
		/*
		File file = new File("高圆圆.jpg") ;
		
		//public boolean renameTo(File dest):
		File file2 = new File("杨桃.jpg") ;
		System.out.println("renameTo():"+file.renameTo(file2)) ;
		*/
		
		//情况2:当前文件的路径名和该后面的路径名不相同,剪切并重命名
		File file = new File("杨桃.jpg");
		//该名后的路径
		File file2 = new File("d:\\mm.jpg") ;
		//調用方法
		System.out.println("renameTo():"+file.renameTo(file2));
	}
}

1.5) File类的判断功能

package com.qianfeng.file_01;

import java.io.File;

/**
 * File的判断功能
 * 
 * 		public boolean isFile():判断是否是文件
 * 		public boolean isDirectory():判断是否是文件夹(目录)
 * 		public boolean canRead():判断是否可读
 * 		public boolean canWrite():判断是否可写
 * 		public boolean exists():判断所file表示的文件/目录是否存在
 * 		public boolean isAbsolute():判断是否是绝对路径
 * 		public boolean isHidden():判断是否是隐藏文件
 * @author zhangyang
 *
 */
public class FileDemo5 {
	
	public static void main(String[] args) {
		File  file = new File("a.txt") ;
		
		System.out.println("isFile():"+file.isFile());
		System.out.println("isDirectory():"+file.isDirectory());
		System.out.println("canRead():"+file.canRead());
		System.out.println("canWrite():"+file.canWrite());
		System.out.println("exists():"+file.exists());
		System.out.println("isAbsolute()():"+file.isAbsolute());
		System.out.println("isHidden():"+file.isHidden());
	}
}

1.6)File类的获取功能

package com.qianfeng.file_01;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * File类的获取功能
 * 基本获取功能
 * 
 * 		public String getAbsolutePath():获取绝对路径名
 * 		public String getPath():当前文件所表示的路径
 * 		public long length():获取文件长度
 * 		public long lastModified():获取当前文件最后一次修改的时间(long:毫秒值)
 * 
 * 
 * 
 * 		
 * @author zhangyang
 *
 */
public class FileDemo6 {
	
	public static void main(String[] args) {
		
		File file = new File("a.txt") ;
		//public String getAbsolutePath()
		System.out.println("getAbso():"+file.getAbsolutePath());//D:\JavaEE2008_workspace\day26\a.txt
		
		//public String getPath()
		System.out.println("getPath():"+file.getPath());//a.txt
		System.out.println("length():"+file.length());
		
		System.out.println("lastModified():"+file.lastModified());
		//1604284636537
		
		//long-----Date:日期格式java.util.Date
		long time = 1604284636537L ;
		Date date = new Date(time) ;
		
		//Date----String:字符串文本格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
		//格式化操作
		String dateStr = sdf.format(date) ;
		System.out.println(dateStr);//2020-11-02 10:37:16
		
	}
}

1.7)File类的高级获取功能

package com.qianfeng.file_01;

import java.io.File;

/**
 * 高级获取功能
 * 		public File[] listFiles():获取的是某个盘符下/目录File数组(目录中的文件)
 * 		public String[] list():获取某个盘符/目录的下的所有文件以及目录的字符串数组
 * 
 * 
 * 需求:
 * 		获取当前d盘下的所有的以".jpg"结尾的文件!
 * 
 * 分析:
 * 	1)描述下d盘符			d:\\		
 * 	 File类描述
 * 
 *  2)获取当前盘符下所有的文件/文件夹所表示字符串数组/目录下的文件的File数组
 *  3)判断如果当前字符串数组或者File数组不为空,遍历获取到每一个文件/目录
 *  4)判断当前file是否是表示的文件
 *  		再次判断是否以".jpg"结尾---->String --> endsWith(".jpg")
 *  5)输出即可!
 * 
 * @author zhangyang
 *
 */
public class FileTest {
	
	public static void main(String[] args) {
		
		//描述下d盘符			d:\\	
		File file = new File("d:\\") ;
		//System.out.println(file);
		
		//public File[] listFiles()
		File[] fileArray = file.listFiles() ;
		//防止空指针
		if(fileArray!=null) {
			//遍历
			for(File f:fileArray) {
				//System.out.println(f);
				//判断f对象是否描述的文件
				if(f.isFile()) {
					//是文件
					//还需要判断:当前文件是否以.jpg结尾
					if(f.getName().endsWith(".jpg")) {
						//是以.jpg结尾
						//输出
						System.out.println(f.getName());
					}
				}
			}
		}
	}
}

2.方法递归

package com.qianfeng.digui_02;
/**
 * 什么是方法递归呢?
 * 	方法递归:
 * 		就是方法本身调用方法一种现象!
 * 
 * Math.max(10,Math.max(40,70)) ; 方法嵌套方法
 * 举例:	
 * 	伪代码
 * 		public void show(int n){ //10
 * 			//出口条件(方法结束条件)
 * 			if(n<0){
 * 
 * 				
 * 				System.exit(0) ;//Java虚拟机终止了
 * 			}
 * 			System.out.println(n) ;
 * 			show(n--)  ;
 * 		}
 * 
 * 递归:
 * 		1)必须定义一个方法:方法调用方法
 * 		2)满足一定的规律
 * 		3)方法必须有出口条件(结束条件)--->否则:就是死递归!
 * 		
 *
 *注意事项:
 *		构造方法不存在递归!
 * 
 * @author zhangyang
 *
 */
public class DiGuiDemo {
	
	/*
	public DiGuiDemo() {
		DiGuiDemo();
	}
	*/
}

2.1)求5的阶乘

package com.qianfeng.digui_02;
/**
 * 求5的阶乘
 * 1)for循环思想
 * 		n!= n*(n-1)!
 * 			....
 * 				...
 * 
 * 2)递归的思想:
 * 		1)定义一个方法:方法还需要调用本身
 * 		2)有一定规律
 * 		3)出口条件
 * 
 * 需求:如果有一对兔子,每三个月起产生一对兔子,小兔子经过三个月后有产生一对兔子,
 * 	假如兔子都不死,最终第二十个月有多少对兔子?
 * 
 * 规律:
 * 		1)第一个月:1对
 * 		    第二个月:1对
 * 		   第三个月:2对
 * 		  第四个月: 3对
 * 		   第五个月:5对
 * 		...
 * 		...
 * 
 * 
 * @author zhangyang
 *
 */
public class DiGuiTest {
	
	public static void main(String[] args) {
		
		//求阶乘实现
		//定义最终结果变量
		int jc = 1 ;
		for(int x = 1 ; x <= 5 ; x ++) {
			jc *= x ;
		}
		System.out.println("5的阶乘是:"+jc);
		System.out.println("5的阶乘是:"+getJc(5));
	}

	//获取最终结果
	private static int getJc(int n) {//5
		//出口条件
		if(n==1) {	// 5 * 4 * 3 * 2 * 1 ...
			return 1 ;
		}else {
			return  n*getJc(n-1) ;  //5 * getJc(5-1) 
					
		}
		/**
		 * 递归的思想:
		 * 分解法:
		 * 		5!
		 * 		5 * 4 !
		 * 			4 * 3 !
		 * 				3 * 2 !
		 * 					2 * 1!		1!==1
		 * 			
		 * 
		 */
	}
}

2.2)兔子生小兔子

package com.qianfeng.digui_02;
/*
	需求:如果有一对兔子,从第三个月起产生一对兔子,小兔子经过第三个月后有产生一对兔子,
* 	假如兔子都不死,最终第二十个月有多少对兔子?
* 
* 规律:
* 		1)第一个月:1对
* 		    第二个月:1对
* 		   第三个月:2对
* 		  第四个月: 3对
* 		   第五个月:5对
* 		  第六个月:8对
* 		  ...
* 		2)第一个月和第二个月兔子对数都是1
* 		 从第三个月开始,每个月兔子的对数等于前两个月兔子对数之和
* 
* 解析
* 	方式1:利用数组
* 		arr[1] arr[0]都是已知的	(角标值表示第几个月)
* 		从第三个月开始,角标2开始,遍历数组  int[] arr = new int[20] ;
*   	arr[x] = arr[x-1]+arr[x-2];
*   
*   方式2:变量的变化
*   	将相邻两个月分别表示a,b
*   第一个月,    第二个月
*   		a = 1 ,b =1 
*   第二个月,	第三个月
*   		a = 1,b = 2
*   第三个月		第四个月
*   	a = 2,b = 3
*   第四个月,第五个月
*   	a= 3,b = 5 
*   ....
*   下一次的a是上一次的b,下一次的b是上一次的a+b
*   
* */ 
public class Test2 {
	
	public static void main(String[] args) {
		//方式1:数组的方式
		//创建一个数组,动态初始化
		int[] arr = new int[20] ; 
		
		//0-19:20个月
		//第一个月
		//第二个月都是1
		arr[0] = 1 ;
		arr[1] = 1 ;
		
		//从第三个月开始,角标2开始,遍历数组 
		for(int x = 2 ; x < arr.length ; x ++) {
//			每个月兔子的对数等于前两个月兔子对数之和
			arr[x] = arr[x-1] + arr[x-2] ;
		}
		
		System.out.println("第二十个月兔子的对数:"+arr[19]);
		System.out.println("----------------------------------");
		/**
		 * 方式2:变量的变化
			*   	将相邻两个月分别表示a,b
			*   第一个月,    第二个月
			*   		a = 1 ,b =1 
			*   第二个月,	第三个月
			*   		a = 1,b = 2
			*   第三个月		第四个月
			*   	a = 2,b = 3
			*   第四个月,第五个月
			*   	a= 3,b = 5 
			*   ....
			*   下一次的a是上一次的b,下一次的b是上一次的a+b
		 */
		//定义两个变量:a,b来表示相邻两个月的数据
		int a = 1 ;
		int b = 1 ;
		//前两个月已经存在值了
		//18个月
		for(int x = 0 ; x <18 ; x ++) {
			//使用中间变量的方式
			//使用temp变量记录一下的a
			int temp = a ;
			a = b ;
			b = temp + a ;
		}
		System.out.println("第二十个月兔子的对数是:"+b);
		System.out.println("-------------------------");
		//递归的思想
		/**
		 * 定义变量n: 表示第几个月
		 * 		当前n==1或者n==2 都是1对兔子 出口条件(结束条件)
		 * 		
		 * 如果不是第一个月或者第二个月:从第三个月开始
		 * 		方法名(n-1)+方法名(n-2)
		 * 
		 * 
		 */
		System.out.println("第二十个月兔子的对数是:"+getRabNum(20));
		
	}

	//n表示的第几个月
	private static int getRabNum(int n) {
		//出口 条件
		if(n==1|| n==2) {
			//第一个月或者第二个月的兔子对数都是1
			return 1 ;
		}else {
//		如果不是第一个月或者第二个月:从第三个月开始,每个月兔子对数等于前两个月之和
			return getRabNum(n-1) + getRabNum(n-2) ;
		}
	}
}

2.3)需要删除带内容的目录(递归思想)

package com.qianfeng.digui_02;

import java.io.File;

/**
 * 需求
 * 		需要删除带内容的目录
 * 		删除当前项目下:demo文件夹
 * 
 * 分析:
 * 		1)描述下当前demo文件夹:File file = new File("demo") ;
 * 		2)定义一个方法:delete(file) 递归删除的方法(删除目录)
 * 			2.1)高级获取功能:获取当前file所表示的文件以及文件夹的File数组[]
 * 			2.2)判断当前File数组不为空
 * 					判断当前file是否是文件夹 isDirectory()
 * 						是文件夹,回到2)步继续调用
 * 
 * 					不是文件夹,是文件
 * 						直接删除:调用delete()删除(查看删除的是
 * 那个文件:获取文件名称)
 * 						
 *				2.3)删除文件夹:调用delete()删除当前空目录
 * 	
 * @author zhangyang
 *
 */
public class Test3 {
	
	public static void main(String[] args) {
		
		//1)使用File 描述当前项目下的demo文件夹
		File srcFile = new File("demo") ;
		
		//2)定义一个删除目录的方法
		delete(srcFile) ;
	}
	
	private static void delete(File srcFolder) {
		//获取srcFolder文件夹下面的所有文件以及文件夹的File数组
		File[] fileArray = srcFolder.listFiles() ;
		if(fileArray!= null) {
			//遍历
			for(File file :fileArray) {
				//获取到每一个file对象,判断当前是否是文件夹
				if(file.isDirectory()) {
					//回到2)进行递归删除
					delete(file);//aaa  bbb ccc
				}else {
					//不是文件夹,直接删除
					System.out.println(file.getName()+"---"+file.delete());
				}
			}
			//删除目录
			System.out.println(srcFolder.getName()+"---"+srcFolder.delete());
		}
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值