Files
tr-agent-client/src/main/java/com/tongran/agent/client/utils/FileCleaner.java
T
qiminbao a2e3e296b5 增加多网IP探测上报;
优化公网运营商信息;
逻辑标识改为读取外部文件;
增加定时任务清理日志临时文件;
2025-10-28 14:24:19 +08:00

74 lines
2.8 KiB
Java

package com.tongran.agent.client.utils;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
public class FileCleaner {
/**
* 删除指定目录中 30 天前修改的文件
*
* @param directoryPath 目录路径,例如:"/tmp/logs"
* @param days 保留天数,传入 30 表示删除 30 天以上的文件
*/
public static void cleanOldFiles(String directoryPath, int days) {
Path dir = Paths.get(directoryPath);
// 检查目录是否存在且是目录
if (!Files.exists(dir)) {
System.err.println("目录不存在: " + directoryPath);
return;
}
if (!Files.isDirectory(dir)) {
System.err.println("路径不是目录: " + directoryPath);
return;
}
// 计算 30 天前的时间点(Instant)
Instant cutoffTime = Instant.now().minus(days, ChronoUnit.DAYS);
List<Path> deletedFiles = new ArrayList<>();
List<Path> failedFiles = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path file : stream) {
// 只处理普通文件(跳过子目录等)
if (Files.isRegularFile(file)) {
try {
BasicFileAttributes attrs = Files.readAttributes(file, BasicFileAttributes.class);
Instant lastModifiedTime = attrs.lastModifiedTime().toInstant();
if (lastModifiedTime.isBefore(cutoffTime)) {
Files.delete(file); // 删除文件
deletedFiles.add(file);
System.out.println("已删除: " + file + " (修改时间: " + lastModifiedTime + ")");
}
} catch (IOException e) {
System.err.println("无法读取或删除文件: " + file + " -> " + e.getMessage());
failedFiles.add(file);
}
}
}
} catch (IOException e) {
System.err.println("遍历目录失败: " + e.getMessage());
}
// 统计结果
System.out.println("✅ 清理完成:");
System.out.println(" 删除文件数: " + deletedFiles.size());
System.out.println(" 删除失败数: " + failedFiles.size());
}
// 使用示例
public static void main(String[] args) {
// String logDir = "/tmp/logs"; // 替换为你的实际目录
// cleanOldFiles(logDir, 30); // 删除 30 天以上的文件
}
}