我想要一些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.. -:)");
}
}
}
}
}
}
答案 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);
}
}
}