Java删除文件,目录
时间:2020-02-23 14:34:27 来源:igfitidea点击:
今天,我们将研究Java删除文件和Java删除目录的示例。
之前我们学习了如何在Java中创建文件。
Java删除文件
Java File delete()方法可用于删除文件或者java中的空目录/文件夹。
Java文件删除方法如果删除了文件,则返回true;如果文件不存在,则返回false。如果您要删除目录,它将检查java File delete()方法是否为空。
如果目录为空,则将其删除,否则delete()方法不执行任何操作并返回false。
因此,在这种情况下,我们必须递归删除所有文件,然后删除空目录。删除非空目录的另一种方法是使用Files.walkFileTree()方法。
在这种方法中,我们可以一个接一个地处理所有文件,并对单个文件调用delete方法。
Java删除文件示例
让我们看一下Java删除文件示例程序。
package com.theitroad.files;
import java.io.File;
public class DeleteFileJava {
/**
* This class shows how to delete a File in Java
* @param args
*/
public static void main(String[] args) {
//absolute file name with path
File file = new File("/Users/hyman/file.txt");
if(file.delete()){
System.out.println("/Users/hyman/file.txt File deleted");
}else System.out.println("File /Users/hyman/file.txt doesn't exist");
//file name only
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");
//delete empty 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");
//try to delete directory with files
file = new File("/Users/hyman/project");
if(file.delete()){
System.out.println("/Users/hyman/project directory deleted from Project root directory");
}else System.out.println("/Users/hyman/project directory doesn't exist or not empty");
}
}
下面是我们第一次执行上述java删除文件示例程序时的输出。
/Users/hyman/file.txt File deleted file.txt File deleted from Project root directory temp/file.txt File deleted from Project root directory temp directory deleted from Project root directory /Users/hyman/project directory doesn't exist or not empty
请注意,临时目录具有file.txt,并且首先被删除,然后目录为空并成功删除,/Users/hyman/project不为空,因此未删除。
在同一程序的后续运行中,输出为:
File /Users/hyman/file.txt doesn't exist File file.txt doesn't exist in the project root directory File temp/file.txt doesn't exist in the project root directory temp directory doesn't exist or not empty in the project root directory /Users/hyman/project directory doesn't exist or not empty
请注意,与createNewFile()不同,delete方法不会引发IOException。
Java删除目录
下面是一个简单的程序,显示了如何删除非空目录。
如果您的目录仅包含文件,则此方法有效。
package com.theitroad.files;
import java.io.File;
public class JavaDeleteDirectory {
public static void main(String[] args) {
File dir = new File("/Users/hyman/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();
}
//now directory is empty, so we can delete it
System.out.println("Deleting Directory. Success = "+dir.delete());
}
}
Java递归删除目录
之前,我们不得不编写基于递归的代码来删除带有嵌套目录的目录。
但是对于Java 7,我们可以使用Files类来实现。
下面是您用于删除目录的代码。
它也需要删除嵌套目录。
package com.theitroad.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("/Users/hyman/log");
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException {
Files.delete(file); //this will work because it's always a File
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir); //this will work because Files in the directory are already deleted
return FileVisitResult.CONTINUE;
}
});
}
}

