org_heigl/filefinder

从一个或多个文件夹生成过滤后的文件列表

1.4.0 2018-06-29 04:54 UTC

README

Build Status Code Climate Test Coverage Scrutinizer Code Quality

此库允许遍历多个文件夹,并过滤文件列表。文件以文件列表对象的形式返回。

安装

使用composer安装Org_Heigl\FileFinder。在项目命令行中调用composer require org_heigl/filefinder

或者,您可以在composer.json中的require部分包含以下行

"org_heigl/filefinder" : "stable"

用法

最简单的用法是向FileFinder添加一个过滤器和目录。

$finder = new \Org_Heigl\FileFinder\FileFinder();
$finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('jpg'));
$finder->addDirectory($dir);
$list = $finder->find();
// $list will be an \Org_Heigl\FileFinder\FileList-Object containing all Files with the extension 'jpg' inside ```$dir```

只要实现了\Org_Heigl\FileFinder\FileListInterface,您也可以设置自己的FileList-对象。这将是这样的

$finder = new \Org_Heigl\FileFinder\FileFinder();
$finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('jpg'));
$finder->addDirectory($dir);
$finder->setFileList(new MyPrettyFileList())
$list = $finder->find();
// $list will be the MyPrettyFileList-Object containing all Files with the extension 'jpg' inside ```$dir```

您也可以使用此片段获取目录下所有实现\Iterator的类的类名到文件名的映射

$finder = new \Org_Heigl\FileFinder\FileFinder();
$finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('php'));
$finder->addFilter(new \Org_Heigl\FileFinder\Filter\ClassIsInstanceof('\Iterator'));
$finder->setFileList(new \Org_Heigl\FileFinder\ClassMapList());
$finder->addDirectory($dir);
$list = $finder->find();
// $list now contains the classname as key and the filepath as value

使用FileList::addDirectory()方法添加的目录将被递归检查。

过滤器必须实现\Org_Heigl\FileFinder\FilterInterface。因此,您可以很容易地添加自己的过滤器。

默认的FileList-实现还包含一个sort方法,可以在使用之前对文件列表进行排序。只需提供像这样作为参数的实现SortInterface

$finder = new \Org_Heigl\FileFinder\FileFinder();
$finder->addDirectory($dir);
$list = $finder->find();
$list->sort(new \Org_Heigl\FileFinder\Sorter\MTime());
// $list now is sorted by MTime ascending.

包含

当前库包含以下过滤器

  • FileExtension - 检查文件扩展名是否是给定扩展名之一。扩展名列表作为构造函数如此给出:new FileExtension(array('foo', 'bar'))
  • FileStart - 检查文件内容是否以给定字符串开头。您可以像这样使用它:new FileStart('<?php')来检查PHP文件。
  • ClassIsInstanceOf - 检查文件是否包含至少实现一个要查找的接口的类。接口可以像这样给出:new ClassIsInstanceOf(['InterfaceOne','\Org_Heigl\FileFinder\FilterInterface']);
  • DateCompare - 比较文件的创建、修改或更改日期与给定日期。比较可以是之前、之后或等于。因此,可以这样调用:new DateCompare(new DateTime(), DateCompare::MTIME, DateCompare::CHECK_BEFORE);。这将包括在当前日期之前更改内容的文件(包括所有内容)。
  • FileSize - 查找文件大小在给定范围内的文件:它可以像这样使用:new FileSize('1kb', '2gb');这将查找大小在1KB到2GB之间的文件。
  • HoldsSinglePHPClass - 查找只包含一个类的文件。包含多个类的文件将被忽略。
  • MimeType - 查找特定MIME类型的文件。您可以像这样使用它:$finfo = new \Org_Heigl\FileFinder\Service\FinfoWrapper(); $filter = new MimeType($finfo, 'application/pdf');这将查找所有PDF文件。此过滤器需要一个FinfoWrapper对象作为第一个对象,该对象将处理实际的MIME类型检测。
  • Not - 取消包含的过滤器。
  • OrList - 包含多个过滤器,只需匹配其中一个即可将文件包含在列表中。

许可证

此库在LICENSE文件中许可下使用MIT许可证。

问题

您有问题吗?请使用问题跟踪器报告它,我们会查看的。

贡献

我们始终欢迎贡献。Fork仓库,做任何您喜欢的事情,然后提交一个pull request!