package bimoku.extract.main; import java.io.File; import java.util.ArrayList; import bimoku.extract.common.PropertyUtil; import bimoku.extract.common.exception.ExtractException; import bimoku.extract.parser.Parser; import com.bimoku.util.FileUtils; /** * 抽取的线程 * * @author 梅良 * @author LPM 跟新优化代码,,使用实现runnable的方法,方便使用线程池 * */ public class Extractdouban implements Runnable{ private String directory; private Parser parser; private String configPath; public Extractdouban(String directory,Parser parser,String configPath) { this.directory = directory; this.parser = parser; this.configPath = configPath; } public void run() { while (!directory.isEmpty()) { ArrayList<String> htmllist = new ArrayList<String>();//所有的html文件 File[] files = FileUtils.getFileslist(directory);//获取所有文件 if (files == null || files.length < 1) { break;//当前目录没有文件,处理完毕了 } for (int i = 0; i < files.length; i++) { if (!files[i].isDirectory()) { htmllist.add(files[i].getName()); } } while (!htmllist.isEmpty()) { //从文件列表中取出一则数据,取完,结束循环 String filepath = directory + "/" + htmllist.remove(0); try { parser.parser(filepath);//调用相关的抽取方法 }catch(ExtractException e) { //抽取异常,把该文件复制到相应的目录下面 recordError(filepath); //在此处对出去失败的记录做处理 e.printStackTrace(); } } } } /** * 抽取失败处理 * @param filePath */ private void recordError(String filePath){ String destPath = PropertyUtil.getProperty(configPath).getProperty("exception") + File.separator + filePath.substring(filePath.lastIndexOf('/')); FileUtils.copyFile(filePath, destPath); } }