在这一小节中将学习如何在Java中删除文件和目录,在上面我们学习了如何在java中创建文件。
1. Java删除文件
- Java File
delete()
方法可用于删除文件或空目录/文件夹。如果文件被删除,delete()
方法返回true
,如果文件不存在则返回false
。 - 如果删除目录,
delete()
方法检查目录是否为空。如果目录为空,则删除目录,否则delete()
方法不会执行任何操作并返回false
。所以在这种情况下,必须递归删除所有文件,然后再删除空目录。 - 删除非空目录的另一种方法是使用
Files.walkFileTree()
方法。在这种方法中,可以逐个处理所有文件,并在单个文件对象上调用delete
方法。
Java删除文件示例
//
package com.journaldev.files;
import java.io.File;
public class DeleteFileJava {
/**
* 此类显示如何在Java中删除文件
* @param args
*/
public static void main(String[] args) {
// 带路径的文件名
File file = new File("tmp/tmp2/file.txt");
if(file.delete()){
System.out.println("tmp/tmp2/file.txt File deleted");
}else System.out.println("File tmp/tmp2/file.txt doesn't exist");
// 只提供文件名称
file = new File("file.txt");
if(file.delete()){
System.out.println("file.txt File deleted from Project root directory");
}else System.out.println("File file.txt doesn't exist in the project root directory");
//relative path
file = new File("temp/file.txt");
if(file.delete()){
System.out.println("temp/file.txt File deleted from Project root directory");
}else System.out.println("File temp/file.txt doesn't exist in the project root directory");
// 删除空的目录
file = new File("temp");
if(file.delete()){
System.out.println("temp directory deleted from Project root directory");
}else System.out.println("temp directory doesn't exist or not empty in the project root directory");
// 试图删除非空目录
file = new File("D:/user/maxsu/project");
if(file.delete()){
System.out.println("D:/user/maxsu/project directory deleted from Project root directory");
}else System.out.println("D:/user/maxsu/project directory doesn't exist or not empty");
}
}
注意,与createNewFile()不同,delete方法不会抛出IOException异常。
2. Java删除目录
下面是一个简单的程序,演示如何删除非空目录。如果目录包含有文件,删除目录不会成功。
import java.io.File;
public class JavaDeleteDirectory {
public static void main(String[] args) {
File dir = new File("D:/worksp/java/log");
if(dir.isDirectory() == false) {
System.out.println("Not a directory. Do nothing");
return;
}
File[] listFiles = dir.listFiles();
for(File file : listFiles){
System.out.println("Deleting "+file.getName());
file.delete();
}
//现在目录为空,所以可以删除它
System.out.println("Deleting Directory. Success = "+dir.delete());
}
}
3. Java递归删除目录
前面编写了基于递归的代码来删除带有嵌套目录的目录。但是使用Java 7,可以使用Files
类来完成。下面是用来删除目录的代码,它也负责删除嵌套目录。
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
public class JavaDeleteDirectoryRecursively {
public static void main(String[] args) throws IOException {
Path directory = Paths.get("D:/worksp/maxsu/log");
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException {
Files.delete(file); // 有效,因为它始终是一个文件
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir); //这将起作用,因为目录中的文件已被删除
return FileVisitResult.CONTINUE;
}
});
}
}
上面就是java删除文件和java删除目录示例的全部内容。