在日期格式为yyymmdd的目录中查找并复制最后一个文件 - 1

时间:2018-01-18 11:53:13

标签: java arrays wildcard

我有一个记录log txt文件的目录。每个日志文件都具有以下标题日期格式20180114.log,即yyymmdd.log

我想获取前一个文件(日期)的副本,所以如果当前日期文件是20180114.log,我想获得20180113.log的副本,然后复制它(可能是与扩展_copy相同的名称)

我正在使用下面的代码列出扩展名* log的所有文件的升序顺序并且它可以正常工作。输出如下:

20180116.LOG 20180117.LOG 20180118.LOG

现在我需要获取最后一个文件的副本 - 1 - (last_entry - 1)并复制它。任何人都可以使用下面的代码帮助解决这个问题:

import java.util.List;
import java.io.File;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.regex.Pattern;


class search
{
public static void main(String[] args) {

String WILD_CARD = "";
 List <File> fileList = new LinkedList<File>();
   File folder = new File("d:\\");
   File[] listOfFiles = folder.listFiles();
    if(WILD_CARD!=null) {  
        Pattern wildCardPattern = Pattern.compile(".*"+WILD_CARD+"
(.*)?.log",Pattern.CASE_INSENSITIVE);
        for(File file: listOfFiles) {
            java.util.regex.Matcher match
wildCardPattern.matcher(file.getName());
            while(match.find()){
                String fileMatch = match.group();
                if(file.getName().equals(fileMatch))  {
                    fileList.add(file); // doesn't work
                }
            }
        }
    }
    else
        fileList = new LinkedList<File>( 
Arrays.asList(folder.listFiles()));

    for (File f: fileList) System.out.println(f.getName());
}

}

提前致谢

2 个答案:

答案 0 :(得分:0)

简单:例如使用SimpleDateFormat

String previousFile = null;
String dateFromFileString = null;
// ...

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmdd");


dateFromFileString = dateFormat.format(new Date()); // ex "20180114"; 

Date parsedDate;
try {
    parsedDate = dateFormat.parse(dateFromFileString);
    Calendar cal = GregorianCalendar.getInstance();
    cal.setTime(parsedDate);
    cal.add(Calendar.DAY_OF_YEAR, -1);

    previousFile = dateFormat.format(cal.getTime()) ;

} catch (ParseException e) {
    //logger.log(e);
}

现在您已获得以前的文件名,请获取该文件并进行检查exists然后将其复制到您想要的位置:

File prevLogFile = new File(dir, previousFile  + ".log");
if (prevLogFile.exists()) {
     // copy file 
     // see link
     Path source = ...
     Path newdir = ...
     Files.copy(source, newdir.resolve(source.getFileName());
}

有关如何复制

的更多详细信息,请参阅Files#copy

答案 1 :(得分:0)

感谢。 yyyymmdd每天动态变化,每天都会创建新文件。我想用这样的东西来获取列表中的最后一个文件然后 - 1,(列表按升序排列)但它不起作用

Object item = (((Deque<File>) fileList).getLast()-1);
System.out.println(item);