浏览 1194 次
锁定老帖子 主题:与业务分离的递归解析方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-18
接口输入参数采用动态参数,方便灵活 import java.io.IOException; public interface CallBack { /** * 接口有意设计成动态参数形式 * 调用更加灵活 * @param objs * @throws IOException */ void execute(Object... objs) throws IOException; } 实现递归过程 短短的15行代码就完成了文件夹的递归解析过程 整个历遍过程不涉及到任何业务代码、更好的分离业务逻辑和代码逻辑分类 import java.io.File; import java.io.IOException; public class FileHandler { /** * 递归解析java文件,然后再调用回归函数处理解析过程 * 如果是文件夹的是递归解析 * 整个历遍过程不涉及到任何业务代码、更好的分离业务逻辑和代码逻辑分类 * @param file * @throws IOException */ public static void parseJavaFile(File file, CallBack callBack) throws IOException { File[] listFile = null; if (file.isDirectory()) { listFile = file.listFiles(); } else { callBack.execute(file); return; } for (File f : listFile) { if (f.isDirectory()) { parseJavaFile(f, callBack); } else { callBack.execute(f); } } } } 测试 在文件夹D:\\htmlParse\\中存放一些包含有中文内容的文件(任何文件) 下面的实例会帮助你解析该文件夹下面的文件,并且把文件内所有的内容进行中文分词打印出来 当你的解析业务发生了变化 你现在需要重新实现parseFile方法 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.wltea.analyzer.IKSegmentation; import org.wltea.analyzer.Lexeme; /** * 递归解析文件夹下所有文件 * 并对文件内容进行中文分词 * @author admin * */ public class ParseFileExample { private static List<String> list = new ArrayList<String>(); private static Pattern p = Pattern.compile("[\u4e00-\u9fa5]+?"); public static void main(String[] args) throws IOException { File file = new File("D:\\htmlParse\\"); //通过回调函数的形式优雅的递归解析文件夹中的文件 FileHandler.parseJavaFile(file, new CallBack() { public void execute(Object... objs) throws IOException { parseFile((File) objs[0]); } }); System.out.println(list); } private static void addChar(String chars) { if (!list.contains(chars)) { list.add(chars); } } /** * 该方法更像是一个业务方法 * 如果你解析业务发生了变化,只需要改变这个方法就可以了 * @param file */ public static void parseFile(File file) { Reader reader = null; try { reader = new InputStreamReader(new FileInputStream(file), "UTF-8"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } IKSegmentation iks = new IKSegmentation(reader); while (true) { Lexeme lex = null; try { lex = iks.next(); String lexeme = null; if (lex != null) { lexeme = lex.getLexemeText(); Matcher m = p.matcher(lexeme); if (m.find()) { addChar(lexeme); } } if (lex == null) return; } catch (IOException e) { e.printStackTrace(); } } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |