RtmpFileCleaner.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.nio.file.FileVisitResult;
  4. import java.nio.file.FileVisitor;
  5. import java.nio.file.Files;
  6. import java.nio.file.Path;
  7. import java.nio.file.attribute.BasicFileAttributes;
  8. import java.time.Duration;
  9. import java.time.LocalDateTime;
  10. import java.time.format.DateTimeFormatter;
  11. import java.util.Set;
  12. import java.util.concurrent.ScheduledExecutorService;
  13. import java.util.concurrent.ScheduledThreadPoolExecutor;
  14. import java.util.concurrent.TimeUnit;
  15. /**
  16. * @author reghao
  17. * @date 2025-12-18 13:43:47
  18. */
  19. public class RtmpFileCleaner {
  20. static ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
  21. static Set set = Set.of("22", "23", "00", "01", "02", "03", "04", "05", "06", "07");
  22. static void test() {
  23. LocalDateTime now = LocalDateTime.now();
  24. String filename = "cam204-1765896327_20251216_224527.flv";
  25. String[] strArr = filename.replace(".flv", "").split("_");
  26. String date = strArr[1];
  27. String time = strArr[2];
  28. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
  29. LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
  30. String hour = time.substring(0, 2);
  31. if (set.contains(hour)) {
  32. }
  33. Duration duration = Duration.between(localDateTime, now);
  34. long result = duration.getSeconds() - 3600L*12;
  35. System.out.println(result);
  36. }
  37. public static void main(String[] args) {
  38. String baseDir = "/opt/data/ngxflv/rtmp";
  39. scheduler.scheduleAtFixedRate(new CleanerTask(baseDir), 0, 8, TimeUnit.HOURS);
  40. }
  41. static class CleanerTask implements Runnable {
  42. private final String baseDir;
  43. private LocalDateTime now;
  44. public CleanerTask(String baseDir) {
  45. this.baseDir = baseDir;
  46. }
  47. @Override
  48. public void run() {
  49. now = LocalDateTime.now();
  50. try {
  51. walkDir(Path.of(baseDir));
  52. } catch (IOException e) {
  53. e.printStackTrace();
  54. }
  55. System.out.printf("%s RtmpFileCleaner task completed.\n", now);
  56. }
  57. private void walkDir(Path path) throws IOException {
  58. Files.walkFileTree(path, new FileVisitor<Path>() {
  59. @Override
  60. public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
  61. return FileVisitResult.CONTINUE;
  62. }
  63. @Override
  64. public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
  65. try {
  66. process(file.toFile());
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. }
  70. return FileVisitResult.CONTINUE;
  71. }
  72. @Override
  73. public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
  74. return FileVisitResult.CONTINUE;
  75. }
  76. @Override
  77. public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
  78. return FileVisitResult.CONTINUE;
  79. }
  80. });
  81. }
  82. private void process(File file) {
  83. String filename = file.getName();
  84. String[] strArr = filename.replace(".flv", "").split("_");
  85. String date = strArr[1];
  86. String time = strArr[2];
  87. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
  88. LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
  89. LocalDateTime current = LocalDateTime.now();
  90. String hour = time.substring(0, 2);
  91. if (set.contains(hour)) {
  92. if (file.delete()) {
  93. System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
  94. } else {
  95. System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
  96. }
  97. return;
  98. }
  99. Duration duration = Duration.between(localDateTime, now);
  100. long result = duration.getSeconds() - 3600L*24;
  101. if (result > 0) {
  102. if (file.delete()) {
  103. System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
  104. } else {
  105. System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
  106. }
  107. }
  108. }
  109. }
  110. }