这已被确定为此处另一个问题的可能重复项,但事实并非如此。我知道如何删除符号链接和文件。我试图保持与符号链接关联的文件,但删除其他所有内容。
我的问题:删除目录中超过 7 天的所有文件,与符号链接关联的文件除外。
问题:符号链接已成功删除,但未删除剩余的旧文件。
详细信息:我正在尝试编写一个简单的 Java 程序来删除超过 7 天的目录中的所有文件和子文件夹,该目录正在运行,但存在一个问题。如果有符号链接,那么我只需要删除链接并保留它链接到的文件。除了这种情况,其他所有内容都会被删除。我知道我非常接近......如果您有任何建议,请告诉我。目前我可以让它删除符号链接,但其他旧文件没有被删除。这可能是一个简单的逻辑错误,或者我以错误的方式处理问题。提前致谢!
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class delcache {
public static void main(String[] args) throws IOException
{
String path1="/home/test/cachetest";
recursiveDelete(7, path1);
}
public static void recursiveDelete(int days, String dirPath) throws IOException {
long cutOff = System.currentTimeMillis() - (days * 24 * 60 * 60 * 1000);
Files.list(Paths.get(dirPath))
.forEach(path -> {
if (Files.isDirectory(path)) {
try {
recursiveDelete(days, path.toString());
} catch (IOException e) {
// log
}
} else {
try {
if (Files.getLastModifiedTime(path).to(TimeUnit.MILLISECONDS) < cutOff) {
String pathsave = null;
if(Files.isSymbolicLink(path)) {
pathsave = path.toRealPath().toString();
System.out.println("pathsave: " + pathsave);
System.out.println("delete symlink: " + path);
Files.delete(path);
}
if(!(Files.isSymbolicLink(path))) {
System.out.println("pathsave: " + pathsave);
if(!(path.toString().equals(pathsave))) {
System.out.println("not equal so delete file: " + path);
Files.delete(path);
}
}
//Files.delete(path);
}
} catch (IOException ex) {
// log
}
}
});
}
}