TempFileManager.java

  1. package org.linkedopenactors.rdfpub.scheduler.tempdir;

  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.nio.file.Files;
  5. import java.nio.file.Path;
  6. import java.nio.file.attribute.BasicFileAttributes;
  7. import java.time.Duration;
  8. import java.time.Instant;
  9. import java.util.Collection;

  10. import org.apache.commons.io.FileUtils;
  11. import org.apache.commons.io.IOUtils;
  12. import org.apache.commons.io.filefilter.TrueFileFilter;

  13. import lombok.extern.slf4j.Slf4j;

  14. @Slf4j
  15. public class TempFileManager {

  16.     private TempFileManagerProperties tempFileManagerProperties;

  17.     public TempFileManagerProperties getTempFileManagerProperties() {
  18.         return tempFileManagerProperties;
  19.     }

  20.     public TempFileManager(TempFileManagerProperties tempFileManagerProperties) {
  21.         this.tempFileManagerProperties = tempFileManagerProperties;
  22.     }
  23.    
  24.     public TempFileManager(String customTempDirName, String prefix, String postix) {
  25.         tempFileManagerProperties = new TempFileManagerProperties(customTempDirName, prefix, postix, 60 * 10);
  26.     }
  27.    
  28.     public TempFileManager(String customTempDirName, String prefix, String postix, long maxAgeInSeconds) {
  29.         tempFileManagerProperties = new TempFileManagerProperties(customTempDirName, prefix, postix, maxAgeInSeconds);
  30.     }
  31.    
  32.     public void cleanup() throws IOException {
  33.         for (File file : getTempFiles()) {
  34.             long ageInSeconds = getAgeInSeconds(file);  
  35.             if(ageInSeconds>=tempFileManagerProperties.getMaxAgeInSeconds()) {
  36.                 log.trace("file ("+file.getCanonicalPath()+") is older than "+tempFileManagerProperties.getMaxAgeInSeconds()+" seconds and will be deleted!");
  37.                 file.delete();
  38.             } else {
  39.                 log.trace("file ("+file.getCanonicalPath()+") to young ("+ageInSeconds +" of "+ tempFileManagerProperties.getMaxAgeInSeconds()+" seconds) to delete.");
  40.             }
  41.         }
  42.     }

  43.     public Collection<File> getTempFiles() {
  44.         try {
  45.             return FileUtils.listFiles(getTempDirFile(), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
  46.         } catch (IOException e) {
  47.             throw new RuntimeException("error gettikng temp files", e);
  48.         }
  49.     }

  50.     private long getAgeInSeconds(File file) throws IOException {
  51.         long ageInSeconds;
  52.         BasicFileAttributes attr = Files.readAttributes(Path.of(file.getAbsolutePath()), BasicFileAttributes.class);            
  53.         Instant lastModified = attr.lastModifiedTime().toInstant();        
  54.         ageInSeconds = Duration.between(lastModified, Instant.now()).toSeconds();          
  55.         return ageInSeconds;
  56.     }
  57.    
  58.     public File createTempFile() throws IOException {
  59.             File tmpFile = File.createTempFile("/"+tempFileManagerProperties.getPrefix(), tempFileManagerProperties.getPostix(), getTempDirFile());
  60.             return tmpFile;
  61.     }

  62.     private File getTempDirFile() throws IOException {
  63.         return getTempDir().toFile();
  64.     }
  65.    
  66.     private Path getTempDir() throws IOException {
  67.         String systemTmpDirStr = System.getProperty("java.io.tmpdir");
  68.         Path customTempDir = Path.of(systemTmpDirStr,IOUtils.DIR_SEPARATOR+"" , tempFileManagerProperties.getCustomTempDirName());
  69.         if(!Files.exists(customTempDir)) {
  70.             Files.createDirectory(customTempDir);
  71.         }
  72.         return customTempDir;
  73.     }
  74. }