@Override
  public void cleanFiles(LocalDate expirationDate) {
    LOG.info("{} start clean files with expiration date {}", tableIdentifier, expirationDate);
    if (!fileIO.exists(this.trashLocation)) {
      return;
    }
    Iterable<PathInfo> datePaths = fileIO.listDirectory(this.trashLocation);

    for (FileInfo datePath : datePaths) {
      String dateName = TableFileUtil.getFileName(datePath.location());
      LocalDate localDate;
      try {
        localDate = parseDate(dateName);
      } catch (Exception e) {
        LOG.warn("{} failed to parse path to date {}", tableIdentifier, datePath.location(), e);
        continue;
      }
      if (localDate.isBefore(expirationDate)) {
        fileIO.deletePrefix(datePath.location());
        LOG.info(
            "{} delete files in trash for date {} success, {}",
            tableIdentifier,
            localDate,
            datePath.location());
      } else {
        LOG.info(
            "{} should not delete files in trash for date {},  {}",
            tableIdentifier,
            localDate,
            datePath.location());
      }
    }
  }
Generate file location in trash

@param relativeFileLocation - relative location of file
@param trashLocation - trash location
@param deleteTime - time the file deleted
@return file location in trash
amoro-format-iceberg/src/main/java/org/apache/amoro/io/BasicTableTrashManager.java