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 Extract implements Runnable{
private String directory;
private Parser parser;
private String configPath;
public Extract(String directory,Parser parser,String configPath) {
this.directory = directory;
this.parser = parser;
this.configPath = configPath;
}
public void run() {
System.out.println(directory);
File[] list = FileUtils.getFileslist(directory);
ArrayList<String> directories = new ArrayList<String>();//第二层目录存放在这里
String directorytemp = "";
//读取第二层目录
for (int i = 0; i < list.length; i++) {
if (list[i].isDirectory()) {
directorytemp = directory + "/" + list[i].getName();
directories.add(directorytemp);
}
}
while (!directories.isEmpty()) {
//每次从directories取出一个目录,在这个目录的content下面解析
String directorylast = directories.remove(0) + "/content";//第三层目录文件夹
ArrayList<String> htmllist = new ArrayList<String>();//所有的html文件
File[] files = FileUtils.getFileslist(directorylast);//获取所有文件
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 = directorylast + "/" + 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);
}
}