笔记(八):File类的使用(二)

创建一个空的文件夹

package com.tedu.file;

import java.io.File;

/**
 * 创建一个文件夹
 * @author Wildmess
 *
 */
public class CreateDirDemo {
	public static void main(String[] args) {
		/**
		 * 创建一个空文件夹
		 */
		File dir = new File("demo");
		if(dir.exists()) {
			System.out.println("文件夹已存在!");
		} else {
			dir.mkdir();
			System.out.println("已创建文件夹!");
		}
	}
}

创建一个多级文件夹

package com.tedu.file;

import java.io.File;

/**
 * 创建多级文件夹
 * 即一个文件夹中还包含着一个文件夹
 */
public class CreateDirs {

	public static void main(String[] args) {
		/*
		 * 在demo文件夹下创建a/b/c/d/e
		 */
		//指定最后一级目录
		File fileDirs = new File("demo/a/b/c/d/e");
		if(fileDirs.exists()) {
			System.out.println("文件夹已存在!");
		} else {
			/*
			 * 如果使用madir创建多级目录会失败,无效
			 * 只要是多级目录,就必须使用madirs方法
			 * 会自动创建父级文件夹
			 */
			fileDirs.mkdirs();
			System.out.println("已创建文件夹!");
		}
	}
}

删除一个空的文件夹

注:delete只能删除一个空的文件夹,含有文件的文件夹的删除需要其他的方法。

package com.tedu.file;

import java.io.File;

/**
 * 删除文件夹
 * @author Wildmess
 *
 */
public class DeleteDirDemo {

	public static void main(String[] args) {
		File file = new File("demo");
		if(file.exists()) {
			file.delete();//该方法只能删除空的文件夹
			System.out.println("文件夹已删除!");
		} else {
			System.out.println("文件夹不存在!");
		}
	}
}

删除一个多级文件夹

要删除一个多级文件夹,必须使用递归。
采用递归的形式,多次调用删除文件。

package com.tedu.file;

import java.io.File;

/**
 * 想要真正的使用delete方法删除掉一个文件夹
 * 就需要使用递归,让文件夹中每一个子文件夹都被删掉
 * 故使用递归编写类似的逻辑比较简单
 * 
 * 注:
 * 1.递归使用的次数尽量少
 * 			递归消耗大,效率差
 * 2.递归的调用必须在一个分支结构中
 * 			否则会无限递归,内存溢出,程序瘫痪
 */
public class DeleteDivDemo2 {
	public static void main(String[] args) {
		File file = new File("demo");
		deleteDir(file);
	}
	//编写一个方法删除文件夹,参数是File
	//考虑是文件夹和文件的不同
	public static void deleteDir(File file) {
		//
		if(file.isDirectory()) {
			//如果是文件夹,先取出所有子项
			File[] fs = file.listFiles();
			//遍历删除数组中的文件
			for(int i=0; i<fs.length; i++) {
				File f = fs[i];
				//调用自己,递归删除
				deleteDir(f);
			}
		} 
		//如果不是文件夹,
		//或在上述操作执行完毕后,就直接删除大文件夹
		file.delete();
	}
}

文件过滤器

FIle类中还可以根据自己设置的条件,编写以恶搞过滤器,只挑选出符合自己要求的文件。
下面代码演示的是过滤出文件名中带有”.“的文件的方法。

package com.tedu.file;

import java.io.File;
import java.io.FileFilter;

/**
 * 文件过滤器
 * 就是在listFiles(FileFilter filter)
 * 在获取该文件夹的子项时进行过滤
 * 只返回符合过滤规则的子项
 * @author Wildmess
 *
 */
public class ListFilterDemo {
	public static void main(String[] args) {
		File file = new File(".");
		if(file.isDirectory()) {
			//如果是一个文件夹
			//创建一个匿名内部类:文件过滤器
			FileFilter filter = new FileFilter() {
				@Override
				public boolean accept(File f) {
					String fname = f.getName();
					System.out.println("过滤:" + fname);
					//返回真表示获取
					return fname.startsWith(".");
				}
			};
			//安装编写的规律规则规律文件
			File[] fs = file.listFiles(filter);
			System.out.println(fs.length);
			for(int i = 0; i<fs.length; i++) {
				System.out.println(fs[i].getName());
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值