Search code examples
javaseleniumautomation

Fetch path of recently downloaded file


I'm working on an automation task, where a file gets downloaded and I have to extract path of that downloaded file alongwith name (I know that file will be downloaded in Downloads folder, but I want path for the latest downloaded file only). Ultimately, I want to fetch extension. But I'll be able to fetch extension only when path is available, please help me out with extracting path.


Solution

  • This should do the job:

    package foo;
    
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.attribute.BasicFileAttributes;
    import java.util.Date;
    import java.util.concurrent.TimeUnit;
    
    public class Bar {
    
        public static File getNewestFileFromDir(File dir) throws IOException {      
            File newestFile = null;
            Date newestCreationDate = null;
            File[] files = dir.listFiles(File::isFile);
            for (File file: files) {
                Path filePath = file.toPath();
                BasicFileAttributes attributes = Files.readAttributes(filePath, BasicFileAttributes.class);
                long milliseconds = attributes.creationTime().to(TimeUnit.MILLISECONDS);
                if ((milliseconds > Long.MIN_VALUE) && (milliseconds < Long.MAX_VALUE)) {
                    Date creationDate = new Date(attributes.creationTime().to(TimeUnit.MILLISECONDS));
                    if (newestCreationDate != null) {
                        if (creationDate.after(newestCreationDate)) {
                            newestCreationDate = creationDate;
                            newestFile = file;
                        }
                    }
                }
            }
            return newestFile;
        }
        
        public static String getFileExtension(File file) {
            String extension = "";
            String fileName = file.getName();
            int i = fileName.lastIndexOf('.');
            if (i > 0) {
                extension = fileName.substring(i + 1).toLowerCase();
            }
            return extension;
        }
    
    }