昨天遇到一个问题,某台Jenkins服务从Mac移植到Windows,不得不把之前的shell脚本用bat实现,回想以前也遇到过这种情况
文件操作是比较常用的场景,以前用对于的增、删、改、查的实现比较多,在此基础上可以再丰富些功能,那么想法转化成行动吧
需求点
- 用代码实现grep,awk,sed等的部分功能,做成插件,可用于日志的过滤、查询、文件数据的查询、统计等,以替代依赖于平台的脚本,提高移植性;
- 支持对文件的操作,也支持对已存在于内存的字符串进行操作,分为过滤和查询统计两大功能;
- 作为一个插件,可扩展性要高。
设计和解决思路
- 设计过滤、查询统计两个接口,使用泛型(规范和扩展);
- 文件操作和字符串操作实现这两个接口;
部分实现类代码
/**
* 设置筛选内容,过滤出包含筛选内容的行
* @param fname 文件路径
* @param filter
* @return 包含筛选内容的所有行
*/
public String grep(String fname, String filter) {
String find = "";
String line;
try {
inputStream = new FileInputStream(fname);
encode = EncodingDetect.getJavaEncode(fname);
sc = new Scanner(inputStream, encode);
while (sc.hasNextLine()) {
line = sc.nextLine();
if (line.contains(filter))
find = find + line + System.getProperty("line.separator");
}
} catch (FileNotFoundException e) {
find = "";
e.printStackTrace();
} fi