java.io.File的两个运用实例-文件的删除及树形目录

7 篇文章 0 订阅

在学习java.io.File时,做了一件事无聊的事,用此类的mkdirs()方法创建一个包含99个文件夹的文件夹。

public static void file100(){
	String pathStr ="";
	for(int i = 0; i < 100 ; i++)
		pathStr += "/就是删不掉我"; 
	pathStr = "C:" + pathStr;
	File file = new File(pathStr);
	file.mkdirs();
}

但随之也出了个问题,我发现在删除它时系统告诉我文件名称过长无法删除,有点头大。想了想,试试用代码来删,看看如何。经过几经改进之后有了如下代码:

public static void deleteFile(File file) {
	File[] fileList;
	if (file.isDirectory() && (fileList = file.listFiles()).length > 0)
		for (int i = 0; i < fileList.length; i++)
			deleteFile(fileList[i]);
	file.delete();
}

思路很简单,向前递归到自己是一个文件或空文件夹时把自己删除,与此同时自己的上层文件夹也就变成了空文件夹(当然此文件或文件夹的同级文件或文件夹也把自己删除了),在此时也就可以把自己删除了。

 

一直觉得树形目录看起来很酷,一天突然来了兴致,干脆自己也做一个得了,经过思索和调整有了如下代码:

public static void fileTreeInjection(File file, final int indent,
		String upBranch, StringBuilder strBuff) {
	File[] fileList;
	try {
		if (file.isDirectory() && (fileList = file.listFiles()).length > 0) {
			for (int i = 0; i < indent; i++) 
				upBranch = upBranch + " ";
			upBranch = upBranch + "|";
			String upBranchCopy = upBranch;
			for (int i = 0; i < indent; i++) 
				upBranch = upBranch + "-";
			for (int i = 0; i < fileList.length; i++) {
				if (i == fileList.length - 1)
					upBranchCopy = upBranchCopy.substring(0, upBranchCopy.length() - 1) + " ";
				strBuff.append(upBranch + fileList[i].getName() + "\n");
				fileTreeInjection(fileList[i], indent, upBranchCopy, strBuff);
			}
		}
	} catch (NullPointerException e) {}
}

fille:你要输出的文件  indent:缩进的数量  upBranch:上层及上上层的枝干部分  strBuff:目录字符的缓冲区

原理和文件删除类似,只不过这里是文件名的输出,再者就是多了一点枝干显示排列方面的字符处理。

还有就是那个空指针异常的捕获,说明一下。这个异常一般在输出指定盘符下的文件目录时会抛出。唉...不知道算不算JDK的一个漏洞,在判断一个文件为文件夹时,如果此文件夹为空,正常调用listFiles()得到的File[]对象应为一个长度为零的数组,而在上面的情况下可能会遇到一个类似文件名为System Volume Information的一个系统隐藏文件,它在调用listFiles()得到的File[]对象为null,有点郁闷。这个文件输出也无太大意义,索性不做处理。

最后的效果如下图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值