Java删除超过N天的文件,其中Path,Filename和N天为变量

时间:2018-06-07 13:42:56

标签: java

我想要一些Java代码来删除超过N天的文件。我在这里看到了很多示例和代码,但不完全是我需要的。我希望能够将路径,文件名和日期(可以是4或7或14天)设置为变量,因为它并不总是相同。 这是我的尝试,但它不能正常工作。 有没有一种简单的方法可以解决这个问题?

import java.io.File;
public class DeleteScript{
public static void main(String[] args) {
System.out.println(args.length);
    if(args.length != 3)
    {
    System.out.println("Bitte Pfad Zum Durschsuchen, Dateiname und Datei maximales Alter eingeben");
            System.exit(0);         
        } 
        String Path=args[0];     
        String FileName=args[1];
        String FileExtension=args[2];
        long Days= 7;
        if(args[0] == null)
        {
            System.out.println("Please Path and Filename!");
            System.exit(0);     
        }
        if(args[1] == null)
        {
            System.out.println("Bitte Dateiname eingeben!");
            System.exit(0);
        }
        if(args[2] == null)
        {
            System.out.println("Bitte Datei maximales Alter eingeben!");
            System.exit(0);
        } 
        File folder = new File(Path);

        if (folder.exists()) {

            File[] listFiles = folder.listFiles();

            long eligibleForDeletion = System.currentTimeMillis() -
                (Days * 24 * 60 * 60 * 1000);

            for (File listFile: listFiles) {

                if (listFile.getName().startsWith(Filename) && listFile.getName().endsWith(FileExtension) &&
                    listFile.lastModified() < eligibleForDeletion) {

                    if (!listFile.delete()) {

                        System.out.println("Error.. -:)");

                    }
                }
            }
        } 
}

}

2 个答案:

答案 0 :(得分:0)

您的代码很难看,并且不遵循Java变量命名约定(较低的驼峰情况)。 您应该将变量名称从Path或FileName更改为path和fileName。 你也声明String FileName = args [1];但在你使用的if子句中: listFile.getName()。startsWith(的文件名)。

对于超过7天前修改过的文件,代码功能正常。 我也建议改变 listFile.getName()。startsWith(Filename)&amp;&amp; listFile.getName()。的endsWith(FileExtension) 至 listFile.getName()。equals(fileName +&#34;。&#34; + fileExtension)。

答案 1 :(得分:0)

以下是一些可以帮助您入门的代码。此代码使用Files.list为文件夹中的每个文件获取List<Path>Path。然后,它将遍历Path列表,并根据文件名的开始方式,文件的扩展名以及文件的创建日期确定是否应将文件标记为删除。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;

/**
 *
 * @author blj0011
 */
public class FileDeletion
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        try {
            // path of folder to check
            String extension = "txt";
            String startWith = "test";
            LocalDate beforeDate = LocalDate.parse("2018-06-05");

            String path = "C:/Users/userName/Desktop/test_folder";
            List<Path> paths = Files.list(Paths.get(path)).collect(Collectors.toList());

            for (Path entry : paths) {
                System.out.println("Entry: " + entry);
                BasicFileAttributes attributes = Files.readAttributes(entry, BasicFileAttributes.class);
                System.out.println("\tCreation Time/UTC Time: " + attributes.creationTime());
                Instant instant = Instant.parse(attributes.lastModifiedTime().toString());
                LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneOffset.UTC.getId()));
                System.out.println("\tLocal Date: " + ldt.toLocalDate());
                System.out.println("\tBefore Date: " + beforeDate);
                if (entry.getFileName().toString().startsWith(startWith) && entry.getFileName().toString().endsWith(extension) && ldt.toLocalDate().isBefore(beforeDate)) {
                    System.out.println("\tMarked for deletion: Yes");                      
                }
                else {
                    System.out.println("\tMarked for deletion: No");
                }

                System.out.println("\n");
            }
        }
        catch (IOException ex) {
            Logger.getLogger(FileDeletion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}