java nio 删除文件_使用jdk1.7nio实现删除文件夹内所有的文件

通过jdk1.7的Files.walkFileTree实现遍历文件树的原理实现,删除文件夹下所有的文件,先把文件删除再把上级文件夹删除。

实现代码:

package xxx.nio;

import java.io.IOException;

import java.nio.file.FileVisitOption;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.StandardCopyOption;

import java.util.EnumSet;

/**

* jdk1.7 nio File工具类

*

* @author 许畅

* @since JDK1.7

* @version 2019年4月17日 许畅 新建

*/

public final class FileUtil {

/**

* 构造方法

*/

private FileUtil() {

}

/**

* 删除目标文件夹获取文件

*

* @param target 目标文件或者目标

* @throws IOException IOException

*/

public static void delete(Path target) throws IOException {

if (Files.isDirectory(target)) {

Files.walkFileTree(target, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,

new DeleteDirectoryVisitor());

} else {

Files.delete(target);

}

}

}

package xxx.nio;

import java.io.IOException;

import java.nio.file.AccessDeniedException;

import java.nio.file.DirectoryNotEmptyException;

import java.nio.file.FileAlreadyExistsException;

import java.nio.file.FileVisitResult;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.SimpleFileVisitor;

import java.nio.file.StandardCopyOption;

import java.nio.file.attribute.BasicFileAttributes;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 文件夹复制

*

* @author 许畅

* @since JDK1.7

* @version 2017年10月13日 许畅 新建

*/

public class CopyDirectoryVisitor extends SimpleFileVisitor {

/** 日志 */

private static final Logger LOGGER = LoggerFactory.getLogger(CopyDirectoryVisitor.class);

/** 源文件 */

private Path source;

/** 目标文件 */

private Path target;

/**

* 构造方法

*

* @param source 源文件

* @param target 目标文件

*/

public CopyDirectoryVisitor(Path source, Path target) {

this.source = source;

this.target = target;

}

/**

* 访问文件

*

* @param file 文件路径

* @param attributes 属性

* @return FileVisitResult

* @throws IOException IO异常

*/

@Override

public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException {

LOGGER.info("Copying " + source.relativize(file));

Files.copy(file, target.resolve(source.relativize(file)), StandardCopyOption.REPLACE_EXISTING);

return FileVisitResult.CONTINUE;

}

@Override

public FileVisitResult preVisitDirectory(Path directory, BasicFileAttributes attributes) throws IOException {

Path targetDirectory = target.resolve(source.relativize(directory));

try {

LOGGER.info("Copying " + source.relativize(directory));

Files.copy(directory, targetDirectory, StandardCopyOption.REPLACE_EXISTING);

} catch (FileAlreadyExistsException e) {

if (!Files.isDirectory(targetDirectory)) {

throw e;

}

} catch (DirectoryNotEmptyException e) {

// ignore

} catch (AccessDeniedException e) {

// ignore

}

return FileVisitResult.CONTINUE;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值