我正在开发一个Scala程序,它将根据文件夹的创建日期列出文件夹及其子目录中的所有日志文件。 到目前为止,这是我提出的代码:
import org.joda.time.{DateTimeZone}
import org.joda.time.format.DateTimeFormat
import java.util.Date
import java.text.SimpleDateFormat
import java.io.File
import scala.collection.JavaConversions._
def getFileTree(f: File): Stream[File] =
f #:: (if (f.isDirectory) f.listFiles().toStream.flatMap(getFileTree)
else Stream.empty)
val files = getFileTree(new File("/props/audits/")).filter(_.getName.endsWith(".log"))
val t = (x:Long) => { new SimpleDateFormat("yyyy-MM-dd").format(x)}
files.toList.map(y => t(y.lastModified))
val latestFiles = files.toList.map(y => (y,t(y.lastModified)))
该文件夹包含日期中的文件,如下所示:
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 8 17:01 170150_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 8 17:06 170500_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 8 19:38 171200_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 11 12:31 176800_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 11 12:34 177150_logs
drwxrwxr-x. 2 in2429OV in2429OV 12288 Dec 11 12:38 177500_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 11 16:05 177850_logs
drwxrwxr-x. 2 in2429OV in2429OV 4096 Dec 11 16:10 178200_logs
drwxrwxr-x. 2 in2429OV in2429OV 12288 Dec 12 07:19 200950_logs
drwxrwxr-x. 2 in2429OV in2429OV 12288 Dec 12 07:20 201300_logs
我在这里遇到的问题是,在输出中,我只能看到日期的文件:2017-12-08 日期:12月11日和12日创建的文件夹中存在的文件未列出。
输出:
(/props/audits/171200_logs/171200_xx_po_control_rules_diagnostic.log,2017-12-08),
(/props/audits/171200_logs/171200_xx_fnd_document_categories_diagnostic.log,2017-12-08),
(/props/audits/171200_logs/171200_xx_internal_bank_account_documents_diagnostic.log,2017-12-08),
(/props/audits/171200_logs/171200_xx_ar_invoices_diagnostic.log,2017-12-08),
(/props/audits/171200_logs/171200_xx_fnd_lookup_types_diagnostic.log,2017-12-08),
由于主文件夹中有子文件夹,我过滤了只有“.log”扩展名的输出。
如果我在此声明中取出过滤器选项:val files = getFileTree(new File("/props/audits/")).filter(_.getName.endsWith(".log"))
然后我可以看到主文件夹的最新修改日期,但只有主文件夹的日期列出如下:
val latestFiles = files.toList.map(y => (y,t(y.lastModified)))
latestFiles: List[(java.io.File, String)] = List((/props/audits/,2017-12-12), (/props/audits/171200_logs),(/props/audits/171200_logs/171200_xx_po_control_rules_diagnostic.log,2017-12-08),..
输出包含超过15000个文件的文件。经过一些研究,我发现列表:latestFiles没有订购
有人能告诉我如何用当前日期检查目录的日期,然后才加载文件。