# file-scanner **Repository Path**: rnkrsoft/file-scanner ## Basic Information - **Project Name**: file-scanner - **Description**: Use Java code to implement the logic of `cat *.log | grep 'Login' | sort | uniq -c | sort -nr`. - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2020-03-06 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # File Scanner ## 描述 用 Java 代码实现下面的 shell 脚本逻辑: ``` cat *.log | grep 'Login' | sort | uniq -c | sort -nr ``` 实现可以使用支持多线程. ### 测试 log ``` Login 123 1212 Login 3 eceaa 4sa Login asdsad adad adasd2 Login asdsd Login Login 123 asdsd Login Login 123 abcd eee ``` ### 期望结果 ``` 3 Login 123 2 asdsd Login 1 adasd2 Login 1 4sa Login 1 1212 Login ``` ## 运行 首先需要将项目引入 IDE (推荐使用 IntelliJ IDEA). ### 生成测试数据 在 IDE 中运行 `playground.fs.SampleLogGenerator`. 运行之后项目中会有一个 `logs` 目录, 其中生成了 `100` 个 log 文件, 每个文件有 200 万行, 总共 5G 的数据文件. 可以在 SampleLogGenerator 中改写文件数目和每个文件的行数. ### 运行 FileScanner 在 IDE 中运行 `FileScannerRunner`. 运行结果的前 13 行会被打印出来, 同时运行的时间也会被打印出来. ## 添加自己的 FileScanner 实现. 可以 clone 项目, 并添加自己的 `FileScanner` 实现. 只需要实现 `LogFileScanner` 接口即可. 添加自己的实现之后需要添加实现单元测试类. 参见 [`GreenLogFileScannerTest`](https://gitee.com/greenlaw110/file-scanner/tree/master/src/test/java/playground/fs/green/GreenLogFileScannerTest): ```java package playground.fs.green; import playground.fs.LogFileScanner; import playground.fs.LogFileScannerTestBase; public class GreenLogFileScannerTest extends LogFileScannerTestBase { @Override protected LogFileScanner getScanner() { return new GreenLogFileScanner(); } } ```