File和递归

file

用于操作文件/目录(创建、删除)、查询文件/目录状态(是否存在、是否创建成功、是否是文件/目录)

构造函数

创建抽象路径(与实际是否存在无关,可以看做是记录对应路径的载体,通过File对象实现实际的查询和操作)

几种重载:
File f =new File(String从盘符开始的完整路径);
File f =new File(String父路径,String子路径);
File f =new File(File 父File对象,String子路径);

方法

创建

public static void main(String[] args) throws IOException {
		String path ="H:\\asd\\erf.txt";
		File f1=new File(path);
		System.out.println(f1.mkdirs());//返回true
		String path2 ="H:\\asd\\erf.txt\\123";
		File f2=new File(path2);
		System.out.println(f2.mkdir());//返回true
		String path3 ="H:\\asd\\erf.txt\\123\\123.txt";
		File f3=new File(path3);
		System.out.println(f3.createNewFile());//返回true
	}
----------------第二次运行,前一次生成的目录和文件已存在---------
public static void main(String[] args) throws IOException {
		String path ="H:\\asd\\erf.txt";
		File f1=new File(path);
		System.out.println(f1.mkdirs());//返回false
		String path2 ="H:\\asd\\erf.txt\\123";
		File f2=new File(path2);
		System.out.println(f2.mkdir());//返回false
		String path3 ="H:\\asd\\erf.txt\\123\\123.txt";
		File f3=new File(path3);
		System.out.println(f3.createNewFile());//返回false
		System.out.println(f1.getName());//返回erf.txt
		System.out.println(f2.getName());//返回123
		System.out.println(f3.getName());//返回123.txt
		System.out.println(f2.delete());//返回false,文件夹非空
		System.out.println(f3.delete());//返回true,删除了文件
		System.out.println(f2.delete());//返回true,文件已删除,文件夹已空可删
	}

file对象.mkdir():

	只能创建单级目录,
	如果给的路径是多级的,且前面的路径不存在,则创建失败返回false;
	如果只有最后一级不存在,创建成功返回true;
	如果路径目录全都已存在,不做变动;返回false

file对象.mkdirs()

	可以创建多级目录
	创建成功返回true
	如果路径目录全都已存在,不做变动;返回false

file对象.createNewFile()

	如果文件前面的目录路径不存在,则创建失败返回false;
	如果只有最后一级文件本身不存在,创建成功返回true;
	如果文件本身已存在,不做变动返回false

删除

删除 file对象.delete()
如果此File对象表示目录,则目录必须为空才能删除

查询

路径 getPath(); getAbsolutePath();

	绝对路径:从盘符开始
	相对路径:从当前文件夹的同级文件夹开始(.\*********,*代替当前文件夹的上级文件夹)

长度 file对象.length

	此处注意:
	1.如果对象是文件,返回的是文件大小;对象是目录,则返回目录的大小(不是目录中的全部文件,只是文件夹本身、映射关系等占的大小);
	2.新创建的没有任何文件“存在过”的文件夹,长度为0;
	3.由于文件夹及其关联映射本身需要占一定内存,最小扇区划分为4096字节,故一旦存在内容,最小都是4096;
	4.由于文件即便删除,在文件夹中实际仍存在(只是无法打开),故删除之后仍可能为4096;
	5.同类获取文件大小的方法还有FileChannel对象.size();FileInputStream对象.available();但是这两个方法只能获取文件的大小,不能访问文件夹路径;

名称 file对象.getName()

	返回file的创建路径(参数中的)最小一级的文件/文件夹名称(不是实际文件夹中最小一级)

判断

是否存在 file对象.exists()

是否为文件 file对象.isfile()

是否为文件夹 file对象.isDirectory()

遍历

file对象.list()

	获取子文件/文件夹名,返回string数组

file对象.listFlies()

	获取子文件/文件夹对象,返回File数组
	调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。 

空指针异常问题

递归

即:方法中调用自身方法
禁止构造函数递归;
递归必须有次数限制且不宜过多,否则会栈内存溢出;

	如图,个人理解——分为2个阶段:
	------------------
	第一阶段(红框内)不断向内部追溯,递归的源头(也是出口),知道找到n==1时停止递归,改为直接return一个int值;
	第二阶段(蓝框内)从根源往后顺序执行,将这个“出口”--值类型不断套入递归的方法,直到到达进入方法的起源,获得递归的结果;
	-----------------
	递归中两部分不断做同样操作,但2部分是有关联的(比如此处n 和n-1的关联),则递归的方法的参数列表中只需要一个参数,另一个参数就是方法的结果(前面数字之和),在调用递归中已经不断获取。

在这里插入图片描述案例:递归求阶乘 5到1的乘积。

public class DiGui {
	public static void main(String[] args) {
		int i=5;
		System.out.println("阶乘结果是"+cheng(i));
	}
	public static int cheng(int n) {
		if(n==1){
			return 1;
		}
		return n*cheng(n-1);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值