话不多说,直接上代码
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
/**
* 删除指定文件或目录。
* @author wisdom
*
*/
public class DeleteFile {
/**
* 日志文件.
*/
private File logFile;
/**
* 删除的文件数量.
*/
private int del_count;
public DeleteFile(File logFile) {
super();
if (!logFile.exists()) {
try {
logFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
this.logFile = logFile;
del_count = 0;
}
public File getLogFile() {
return logFile;
}
public int getDel_count() {
return del_count;
}
public static void main(String[] args) {
Date start = new Date();
DeleteFile df = new DeleteFile(new File(args[0]));
if (df.delete(args[1])) {
System.out.println("文件删除成功");
} else {
System.out.println("文件删除失败");
}
Date end = new Date();
//用时
System.out.println("time=" + (end.getTime() - start.getTime()));
System.out.println("共删除" + df.getDel_count() + "个文件");
}
/**
* 删除主方法.
* @param file
* @return
*/
public boolean delete(String filePath) {File file = new File(filePath);if (!file.exists()) {//文件不存在,直接退出return false;}if (file.isDirectory()) {//文件是目录return deleteDirectory(file);} else {return deleteFile(file);}}/**
* 删除文件. * @param file * @return */private boolean deleteFile(File file) {if (!(file.exists() && file.isFile())) { //不存在或是目录文件,直接退出
return false;} else {try (FileWriter fw = new FileWriter(logFile, true);) {fw.write("\n删除文件------" + file.getAbsolutePath());}
catch (IOException e) {e.printStackTrace();}del_count++;return file.delete();//就这句话管用,删就一句话}}/** * 删除目录. * @param file * @return */private boolean deleteDirectory(File file) {boolean flag = false;if (!(file.exists() && file.isDirectory())) {return flag;//不存在或不是目录文件,直接退出
} File[] files = file.listFiles();for (File f : files) {//遍历file目录下的子文件和目录if (f.isFile()) {flag = deleteFile(f.getAbsoluteFile());} else {flag = deleteDirectory(f.getAbsoluteFile());//递归删除方式}if (!flag) break;}try (FileWriter fw = new FileWriter(logFile, true);)
{fw.write("\n删除目录------" + file.getAbsolutePath());} catch (IOException e) {e.printStackTrace();}del_count++;flag = file.delete();//删除目录下的所有文件后,即可删除该目录,否则删除失败return flag;}}
本来以为用这种方式删除电脑上的含有很多子文件的目录会快一点,然并卵。代码可以直接用,传两个参数即可。