| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import java.io.File;
- import java.io.IOException;
- import java.nio.file.FileVisitResult;
- import java.nio.file.FileVisitor;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.attribute.BasicFileAttributes;
- import java.time.Duration;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.Set;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.ScheduledThreadPoolExecutor;
- import java.util.concurrent.TimeUnit;
- /**
- * @author reghao
- * @date 2025-12-18 13:43:47
- */
- public class RtmpFileCleaner {
- static ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
- static Set set = Set.of("22", "23", "00", "01", "02", "03", "04", "05", "06", "07");
- static void test() {
- LocalDateTime now = LocalDateTime.now();
- String filename = "cam204-1765896327_20251216_224527.flv";
- String[] strArr = filename.replace(".flv", "").split("_");
- String date = strArr[1];
- String time = strArr[2];
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
- LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
- String hour = time.substring(0, 2);
- if (set.contains(hour)) {
- }
- Duration duration = Duration.between(localDateTime, now);
- long result = duration.getSeconds() - 3600L*12;
- System.out.println(result);
- }
- public static void main(String[] args) {
- String baseDir = "/opt/data/ngxflv/rtmp";
- scheduler.scheduleAtFixedRate(new CleanerTask(baseDir), 0, 8, TimeUnit.HOURS);
- }
- static class CleanerTask implements Runnable {
- private final String baseDir;
- private LocalDateTime now;
- public CleanerTask(String baseDir) {
- this.baseDir = baseDir;
- }
- @Override
- public void run() {
- now = LocalDateTime.now();
- try {
- walkDir(Path.of(baseDir));
- } catch (IOException e) {
- e.printStackTrace();
- }
- System.out.printf("%s RtmpFileCleaner task completed.\n", now);
- }
- private void walkDir(Path path) throws IOException {
- Files.walkFileTree(path, new FileVisitor<Path>() {
- @Override
- public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
- return FileVisitResult.CONTINUE;
- }
- @Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
- try {
- process(file.toFile());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return FileVisitResult.CONTINUE;
- }
- @Override
- public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
- return FileVisitResult.CONTINUE;
- }
- @Override
- public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
- return FileVisitResult.CONTINUE;
- }
- });
- }
- private void process(File file) {
- String filename = file.getName();
- String[] strArr = filename.replace(".flv", "").split("_");
- String date = strArr[1];
- String time = strArr[2];
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
- LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
- LocalDateTime current = LocalDateTime.now();
- String hour = time.substring(0, 2);
- if (set.contains(hour)) {
- if (file.delete()) {
- System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
- } else {
- System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
- }
- return;
- }
- Duration duration = Duration.between(localDateTime, now);
- long result = duration.getSeconds() - 3600L*24;
- if (result > 0) {
- if (file.delete()) {
- System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
- } else {
- System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
- }
- }
- }
- }
- }
|