Flume-ng-1.3.0 spooling source的方式增加了对目录的递归检测的支持
2013-04-22 17:31
323 查看
原有的spooling source的方式只支持一级目录的文件变动的检测,修改了一下源码支持对目录的递归检测,可以支持多级目录下的文件变动
SpoolingFileLineReader类增加以下下方法
/**
* add by yangbutao
*
* @param files
* @param dir
* @param filter
*/
private void listDirFiles(List<File> files, File dir, FileFilter filter) {
File[] childs = dir.listFiles(filter);// 列出目录下所有的文件
for (int i = 0; i < childs.length; i++) {
if (childs[i].isFile()) {
files.add(childs[i]);
} else {
if (childs[i].isDirectory()) {
listDirFiles(files, childs[i], filter);// 如果是个目录,就继续递归列出其下面的文件.
}
}
}
}
修改getNextFile方法
private Optional<FileInfo> getNextFile() {
/* Filter to exclude finished or hidden files */
FileFilter filter = new FileFilter() {
public boolean accept(File pathName) {
if ((pathName.getName().endsWith(completedSuffix))
|| (pathName.getName().startsWith("."))) {
return false;
}
return true;
}
};
// List<File> candidateFiles =Arrays.asList(directory.listFiles(filter));//注释掉原有的
List<File> candidateFiles = new ArrayList<File>();//新增的
listDirFiles(candidateFiles, directory, filter);//新增的
SpoolingFileLineReader类增加以下下方法
/**
* add by yangbutao
*
* @param files
* @param dir
* @param filter
*/
private void listDirFiles(List<File> files, File dir, FileFilter filter) {
File[] childs = dir.listFiles(filter);// 列出目录下所有的文件
for (int i = 0; i < childs.length; i++) {
if (childs[i].isFile()) {
files.add(childs[i]);
} else {
if (childs[i].isDirectory()) {
listDirFiles(files, childs[i], filter);// 如果是个目录,就继续递归列出其下面的文件.
}
}
}
}
修改getNextFile方法
private Optional<FileInfo> getNextFile() {
/* Filter to exclude finished or hidden files */
FileFilter filter = new FileFilter() {
public boolean accept(File pathName) {
if ((pathName.getName().endsWith(completedSuffix))
|| (pathName.getName().startsWith("."))) {
return false;
}
return true;
}
};
// List<File> candidateFiles =Arrays.asList(directory.listFiles(filter));//注释掉原有的
List<File> candidateFiles = new ArrayList<File>();//新增的
listDirFiles(candidateFiles, directory, filter);//新增的
相关文章推荐
- Flume-ng-1.4.0 spooling source的方式增加了对目录的递归检测的支持
- Flume的Spooling Directory Source支持Sub-directories
- flume-ng学习之spooling directory类型source配置深入及解析
- Flume NG源码分析(五)使用ThriftSource通过RPC方式收集日志
- QBlog博客 V2.5 版本发布 增加健康频道[支持多语言、多用户、多数据库、目录级URL]
- Flume笔记--source端监听目录,sink端上传到HDFS
- flume-ng 自定义sink 实现rollfile 变量目录
- flume学习(十):如何使用Spooling Directory Source
- flume-ng-sql-source实现oracle增量数据读取
- 通过java递归思想实现以树形方式展现出该目录中的所有子目录和文件
- 【Java】【Fulme】Flume-NG源码阅读之SpoolDirectorySource
- [FLUME-2052]Spooling directory source should be able to replace or ignore malformed characters
- 【Java】【Fulme】Flume-NG源码阅读之SpoolDirectorySource
- Flume-ng生产环境实践(三)实现文件sink,按照固定格式目录输出
- flume学习(十一):如何使用Spooling Directory Source
- java编程思想——递归的方式,添加目录和文件
- Flume学习12_Flume Spooling directory source读取文件格式的要求
- flume之Taildir Source支持变化追加文件的日志收集
- 用非递归方式遍历目录及其子目录的文件
- Flume-ng源码解析之Source组件