package com.sdty.main;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class DeleteFile implements Callable<Boolean> {
private List<FileInfo> fileList;
private long totalSize;
private long floorSize;
public DeleteFile(List<FileInfo> fileList, long totalSize, long floorSize) {
this.totalSize = totalSize;
this.floorSize = floorSize;
this.fileList = fileList;
}
@Override
public Boolean call() throws Exception {
long sumSize = 0;
for (int i = 0; i < fileList.size(); i++) {
sumSize += fileList.get(i).getFile().length();
if (sumSize > (totalSize - floorSize * 1024 * 1024)) {
break;
}
File file = fileList.get(i).getFile();
file.delete();
// if(file.getParentFile().isDirectory()&&file.getParentFile().length()==0)
// {
// file.getParentFile().delete();
// }
System.out.println("删除文件:" + fileList.get(i).getFile());
}
return true;
}
}
class FileInfo implements Comparable<FileInfo> {
private File file;
public FileInfo(File file) {
this.file = file;
}
public long getFileTimeStamp() {
return this.file.lastModified();
}
public File getFile() {
return this.file;
}
@Override
public int compareTo(FileInfo o) {
if (this.getFileTimeStamp() > o.getFileTimeStamp()) {
return 1;
} else if (this.getFileTimeStamp() < o.getFileTimeStamp()) {
return -1;
}
return 0;
}
}
public class DeleteFileMain {
private static List<FileInfo> fileList;
private static long ceilSize;
private static long floorSize = 2L;
private static long totalSize = 0L;
private static String filePath = "";
private static List<String> emptyfileList;
private static void listFiles(String filePath) {
File file = new File(filePath);
if (file.isFile() == true) {
fileList.add(new FileInfo(file));
System.out.println("查找文件:" + file);
} else if (file.isDirectory() == true) {
if (file.listFiles().length == 0) {
System.out.println("查找目录:" + file);
} else {
int zfiles = file.listFiles().length;
File[] delfile = file.listFiles();
for (int i = 0; i < zfiles; i++) {
if (delfile[i].isDirectory()) {
listFiles(delfile[i].getAbsolutePath());
} else {
fileList.add(new FileInfo(delfile[i]));
totalSize += delfile[i].length();
System.out.println("查找文件:" + delfile[i]);
}
}
System.out.println("查找目录:" + file);
}
} else {
System.out.println("查找失败:不存在该对象!");
}
}
private static void delFiles() {
long sumSize = 0;
for (int i = 0; i < fileList.size(); i++) {
sumSize += fileList.get(i).getFile().length();
if (sumSize > (totalSize - floorSize * 1024 * 1024)) {
break;
}
File file = fileList.get(i).getFile();
file.delete();
// if(file.getParentFile().isDirectory()&&file.getParentFile().length()==0)
// {
// file.getParentFile().delete();
// }
System.out.println("删除文件:" + fileList.get(i).getFile());
}
}
private static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
private static void clearEmptyDir(File file) {
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
clearEmptyDir(f);
}
}
if (file.isDirectory() && file.listFiles().length == 0) {
file.delete();
}
// File file = new File(filePath);
// if (file.isFile() == true) {
// file.delete();
// } else if (file.isDirectory() == true) {
// if (file.length() == 0) {
// file.delete();
// System.out.println("删除目录:" + file);
// } else {
// int zfiles = file.listFiles().length;
// File[] delfile = file.listFiles();
// for (int i = 0; i < zfiles; i++) {
// if (delfile[i].isDirectory()) {
// clearEmptyDir(delfile[i].getAbsolutePath());
// }
// }
// file.delete();
// }
// }
}
public static void main(String[] args) {
fileList = new ArrayList<FileInfo>();
long startMili = System.currentTimeMillis();
System.out.println("开始 " + startMili);
filePath = "E:\\Download\\DownLoadBack\\+v4.3源码 - 副本";
listFiles(filePath);
long endMili = System.currentTimeMillis();
System.out.println("查找结束 " + endMili);
System.out.println("查找耗时为:" + (endMili - startMili) + "毫秒");
Collections.sort(fileList);
endMili = System.currentTimeMillis();
System.out.println("查找结束 " + endMili);
System.out.println("排序耗时为:" + (endMili - startMili) + "毫秒");
/*
* int threadNum=80;
*
*
* ExecutorService pool = Executors.newFixedThreadPool(threadNum);
* ArrayList<Callable<Boolean>> callers = new
* ArrayList<Callable<Boolean>>();
*
* int page = fileList.size()/threadNum; //int toIndex=0;
*
*
* for (int i = 0; i < threadNum; i++) {
*
* //if((i+1)*page>fileList.size())
*
*
*
* callers.add(new DeleteFile( new
* ArrayList<FileInfo>(fileList.subList(i*page,
* (i+1)*page)),totalSize,floorSize)); }
*
* try { pool.invokeAll(callers); } catch (InterruptedException e) {
*
* e.printStackTrace(); } pool.shutdown();
*/
delFiles();
endMili = System.currentTimeMillis();
System.out.println("查找结束 " + endMili);
System.out.println("删除耗时为:" + (endMili - startMili) + "毫秒");
clearEmptyDir(new File(filePath));
endMili = System.currentTimeMillis();
System.out.println("结束 " + endMili);
System.out.println("总耗时为:" + (endMili - startMili) + "毫秒");
}
}
java 删除文件(删除空目录)
最新推荐文章于 2024-01-24 16:05:09 发布