File类详解

目录

一、File类的概述及作用

1.1File概述

1.2 File类作用

二、File类构造方法及常用方法

2.1 File类静态成员变量

2.2 File类构造方法

2.3 File类常用方法

2.3.1 File类创建文件功能

2.3.2 File类创建文件夹功能

2.3.3 File类删除功能

2.3.4 File类获取功能

2.3.5 File类判断功能

三、Java递归

3.1 递归分类

3.2 注意事项

3.3 递归小练习

四、File类经典小案例


一、File类的概述及作用

1.1File概述

所属包 java.io

  • File是文件和文件夹的抽象表现形式
  • java把电脑中的文件各文件夹封装为一个File类,我们可以使用File类对文件个文件夹进行操作

1.2 File类作用

用来操作硬盘上的文件和文件夹

二、File类构造方法及常用方法

2.1 File类静态成员变量

/*
与系统有关的路径分隔符
    Mac和Linux系统  :
    Windows系统  ;
*/
static String pathSeparator
/*
与系统有关的默认名称分隔符
    Mac和Linux系统    /
    Windows系统    \
*/
static String separator

2.2 File类构造方法

File(File parent,String child)//根据父路径文件对象和子类路径字符串创建文件对象
File(String parent,String child)//根据父路径字符串和子类路径字符串创建文件对象
File(String pathname)//根据文件路径字符串创建文件对象
package com.zking.test;
import java.io.File;
public class Test {
	public static void main(String[] args) {
		// 在Java程序中如何描述电脑中某个文件或者文件夹?
		// 通过File类去描述
		// 如何使用?-----实例化即可得到一个文件对象

        //File(File parent,String child)//根据父路径文件对象和子类路径字符串创建文件对象
        File file1 = new File("D:\\");
        File file2 = new File(file1,"hello.text");

        //File(String parent,String child)//根据父路径字符串和子类路径字符串创建文件对象
        File file3 = new File("D:\\","1.txt");

        //File(String pathname)//根据文件路径字符串创建文件对象
        File file4 = new File("D:\\2.txt");
	}

}

2.3 File类常用方法

2.3.1 File类创建文件功能

/*
根据文件路径创建文件对象
如果文件存在,则什么都不做,返回false
如果文件不存在,则创建该文件返回true
注意:只能用来创建文件,不能用来创建文件夹。
*/
boolean createNewFile();
package com.zking;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:\\1.txt");
		try {
			if (file.createNewFile()) {
				System.out.println("文件创建成功");
			} else {
				System.out.println("文件已创建,不能重复创建");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

2.3.2 File类创建文件夹功能

/*
创建文件夹,成功返回true,否则返回false
只能用来创建文件夹,不能用来创建文件
能创建单级文件夹
*/
boolean mkdir()
/*
创建文件夹,可以创建单级或多级文件夹
只能用来创建文件夹
*/
boolean mkdirs()
package com.zking;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:\\我的音乐");
		if (file.mkdir()) {
			System.out.println("mkdir文件夹创建成功");
		} else {
			System.out.println("mkdir文件夹已创建,不能再次创建");
		}

		File file2 = new File("D:\\我的音乐\\流行");
		if (file2.mkdirs()) {
			System.out.println("mkdirs文件夹目录创建成功");
		} else {
			System.out.println("mkdirs文件夹目录已创建,不能再次创建");
		}

	}
}

2.3.3 File类删除功能

/*
删除文件,如果删除成功返回true,否则返回false
注意:如果是文件夹,则要求文件夹必须为空文件夹,否则无法删除
*/
boolean delete()
package com.zking;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:\\我的音乐\\爱.mp3");
		/*
		删除文件,如果删除成功返回true,否则返回false
		注意:如果是文件夹,则要求文件夹必须为空文件夹,否则无法删除
		*/
		System.out.println(file.delete());

	}
}

2.3.4 File类获取功能

/*
获取文件大小,单位是:字节
注意:只能用来获取文件的大小,如果是文件夹,则返回值是一个垃圾直(不确定的值)
*/
long length()
/*
 获取文件夹和文件的名字
*/
String getName()
/*
 获取父路径字符串
*/
String getParent()
/*
获取父路径文件对象
*/	
File getParentFile()
/*
 获取绝对路径字符串
*/
String getAbsolutePath
/*
获取绝对路径文件对象
*/	
File getAbsoluteFile()
/*
 获得文件的最后修改时间
*/	
long lastModified()
/*
获得文件夹下面所有文件的名字
*/
String list()
/*
获取当前文件夹下所有的文件对象(普通文件和子文件夹)
当前文件夹指方法调用者
*/	
File[] listFiles()
/*
获得当前系统的盘符
*/	
String[] listRoots()

package com.zking;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:\\我的音乐\\爱.mp3");
		// length()获取文件大小,单位是:字节
		System.out.println(file.length());
		// getName()获取文件夹和文件的名字
		System.out.println(file.getName());

		// getParent()获取父路径字符串
		System.out.println(file.getParent());
		// getParentFile()获取父路径文件对象
		System.out.println(file.getParentFile());
		// getAbsolutePath获取绝对路径字符串
		System.out.println(file.getAbsolutePath());
		// getAbsoluteFile()获取绝对路径文件对象
		System.out.println(file.getAbsoluteFile());
		// lastModified() 获得文件的最后修改时间
		System.out.println(file.lastModified());
		// list()获得文件夹下面所有文件的名字
		File file2 = new File("D:\\我的音乐");
		String[] list = file2.list();
		for (int i = 0; i < list.length; i++) {
			System.out.println(list[i]);
		}
		// listFiles()获取当前文件夹下所有的文件对象(普通文件和子文件夹)当前文件夹指方法调用者
		File file3 = new File("D:\\我的电影");
		File[] listFiles = file3.listFiles();
		for (File file4 : listFiles) {
			System.out.println(file4.getPath());
		}

		// listRoots()获得当前系统的盘符
		File[] listRoots = File.listRoots();
		System.out.println(listRoots);

	}
}

2.3.5 File类判断功能

/*
判断文件或文件夹是否存在,存在返回true,否则false
*/
boolean exists()
/*
判断是否是一个普通文件,如果是返回true,否则false
如果文件不存在,则返回false
*/
boolean isFile()
/*
判断是否是一个文件夹,如果是返回true,否则发挥false
如果文件夹不存在,则返回false
*/
boolean isDirectory()
/*
判断是否是隐藏文件
*/
boolean isHidden()
package com.zking;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:\\我的音乐\\爱.mp3");
		// exists()判断文件或文件夹是否存在,存在返回true,否则false
		System.out.println(file.exists());
		// isFile()判断是否是一个普通文件,如果是返回true,否则false如果文件不存在,则返回false
		System.out.println(file.isFile());
		// isDirectory()判断是否是一个文件夹,如果是返回true,否则发挥false如果文件夹不存在,则返回false
		System.out.println(file.isDirectory());
		// isHidden()判断是否是隐藏文件
		System.out.println(file.isHidden());

	}
}

三、Java递归

具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

简单的说:递归就是在方法中调用方法本身。

3.1 递归分类

递归的分类
    直接递归:方法A调用方法A
    间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A

3.2 注意事项

递归的两个条件
        可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
        存在一种简单情境,可以使递归在简单情境下退出。(递归出口)

注意事项

        递归必须要有出口:结束递归的条件
        递归次数不要太多
        构造方法不能使用递归

3.3 递归小练习

package com.zking;

public class Test {
    public static void main(String[] args) {
        System.out.println(sum(100));
    }
    /**
     * 方法功能:递归进行1-100的和
     * @param n
     * @return
     */
    public static int sum(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + sum(n - 1);
        }
    }
}

四、File类经典小案例

package com.zking.test;

import java.io.File;

public class Demo {
	
	//f(x) = f(x-1)+f(x-2)
	public static int f(int x) {//x = 21
		if(x == 1 || x == 2) {
			return 1;
		}
		return f(x-1)+f(x-2);
	}
	
	/**
	 * 方法功能:查找D:\\mylove文件夹目录下得所有文件信息(文件)
	 * @param args
	 */
	public static void findFileAll(File file) {
		//1.判断参数file是文件还是文件夹
		if(file.isFile()) {//file是文件对象
			System.out.println("名称: "+file.getName());
		}else if(file.isDirectory()) {//file是文件夹对象
			//获取该文件夹下得所有文件信息
			File[] files = file.listFiles();
			//判断如果是系统文件   直接排除
			if(files == null) {
				return;
			}
			for (File file2 : files) {
				findFileAll(file2);
			}
		}
	}
	
	
	
	/**
	 * 方法功能:查找D盘根目录下得所有.txt文件
	 * @param args
	 */
	public static void findTxtAll(File file) {
		//判断file是文件还是文件夹
		if(file.isFile()) {
			//判断该文件是否是.txt结尾的
			//利用截取技术
			//获取该文件的名字
			String fileName = file.getName();
			//根据名字获取最后一个.的下标位置
			int index = fileName.lastIndexOf('.');
			if(index!=-1) {//该文件存在.
				String hz = fileName.substring(index);
				//判断
				if(".txt".equals(hz)) {
					System.out.println(fileName);
				}
			}
		}else if(file.isDirectory()) {//文件夹
			//获取该文件夹下得所有文件
			File[] file2 = file.listFiles();
			if(file2==null) {
				return;
			}
			//遍历得到每一个File对象信息
			for (File file3 : file2) {//4个文件夹
				//递归调用本身回到起点  重新判断每个file3对象是文件还是文件夹
				findTxtAll(file3);
			}
		}
	}
	
	
	/**
	 * 方法功能:删除某目录下得所有.txt文件
	 * @param args
	 */
	public static void delTxtAll(File file) {//D:\\mylove
		//1.判断参数file是文件还是文件夹
		if(file.isFile()) {//参数file对象是文件对象
			//System.out.println("文件对象");
			//判断file文件是否以.txt结尾的文件
			//①获取该文件对象的名称
			String fileName = file.getName();
			//System.out.println("文件名称: "+fileName);
			//②获取该文件名称最后一次出现"."的下标位置
			int index = fileName.lastIndexOf('.');
			//System.out.println("下标: "+index);
			//判断index是否存在
			if(index!=-1) {//说明文件中有"."
				//截取后缀名
				String hz = fileName.substring(index);
				//System.out.println("后缀名: "+hz);
				//判断:获取的后缀是否是.txt
				if(".txt".equals(hz)) {
					//删除该文件了
					file.delete();
				}
			}
		}else if(file.isDirectory()) {//参数file对象是文件夹对象
			//System.out.println("文件夹对象");
			//获取该文件夹下得所有文件对象
			File[] files = file.listFiles();
			if(files==null) {
				return;
			}
			//遍历得到每一个文件对象  继续去判断是否是文件还是文件对象  --递归掉自己
			for (File file2 : files) {
				delTxtAll(file2);
			}
		}
	}

	public static void main(String[] args) {
		//注意事项:如果目录有系统隐藏文件  必须判断  返回出去
		File file = new File("D:\\mylove");
//		findFileAll(file);
//		findTxtAll(file);
		delTxtAll(file);		
	}
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淡独东执

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值