我有一个记录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());
}
}
提前致谢
答案 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);