SeachUtil.java package cn.huawei.com.CompressedSeacher.util;import cn.huawei.com.CompressedSeacher.view.com.impl.FileListTableImpl;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;i
package cn.huawei.com.CompressedSeacher.util; import cn.huawei.com.CompressedSeacher.view.com.impl.FileListTableImpl; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * ** * * @author l00358914 */ public class SeachUtil { private static final SeachUtil instance = new SeachUtil(); private SeachUtil() { } public static SeachUtil getInstance() { return instance; } /** * 将文本文件中的内容读入到buffer中 * * @param buffer buffer * @param filePath 文件路径 * @throws IOException 异常 * @author cn.outofmemory * */ public static boolean isFileOkToAdd(String filePath, String[] conditions) throws IOException { //需要对文件路径进行判断,如果不存在,直接返回 if (!new File(filePath).exists()) { return false; } InputStream is = new FileInputStream(filePath); // File is=new File(new FileInputStream(filePath)); String line; // 用来保存每行读取的内容 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); while ((line = reader.readLine()) != null) { // 如果 line 为空说明读完了 for (int a = 0; a < conditions.length; a++) { if (line.contains(conditions[a])) {// 如果包含这个关键字,直接返回 return true; } else {// 如果某一个关键字不包含在名字中,继续判断下面的关键字 continue; } } } reader.close(); is.close(); return Boolean.FALSE; } /** * ** * * @param entryName * @param conditions * @return */ public static boolean isOkToAdd(String entryName, String[] conditions) { if (FileListTableImpl.getInstance().isAnd()) {// 如果是and条件 for (int a = 0; a < conditions.length; a++) { if (isFile(entryName)) {// 如果是文件 if (isOnlyCheckName()) {// 如果仅仅在jarentry的名字中寻找而不在名字前面的路径中查找 if (getEntryFileName(entryName).contains(conditions[a])) {// 如果包含这个关键字,继续判断下一个关键字 continue; } else {// 如果某一个关键字不包含在名字中,返回false, 不符合and return false; } } else {// 如果在整个jarentry的全路径中寻找 if (entryName.contains(conditions[a])) {// 如果包含这个关键字,继续判断下一个关键字 continue; } else {// 如果某一个关键字不包含在名字中,返回false, 不符合and return false; } } } else {// 如果是目录 return false; } } return true; } else {// 如果是 or 条件 for (int a = 0; a < conditions.length; a++) { if (isOnlyCheckName()) {// 如果仅仅在名字中寻找 if (isFile(entryName)) {// 如果是文件 if (getEntryFileName(entryName).contains(conditions[a])) {// 如果包含这个关键字,返回 return true; } continue; } else {// 如果是目录 return false; } } else {// 如果在整个路径中寻找 if (entryName.contains(conditions[a])) {// 如果路径中包含这个关键字 if (isFile(entryName)) {// 如果是文件 return true; } else {// 如果是目录 return false; } } else {// continue; } } } return false;// } } private static boolean isOnlyCheckName() { return FileListTableImpl.getInstance().isOnlyCheckName(); } private static boolean isCheckFileContent() { return FileListTableImpl.getInstance().isCheckFileContent(); } private static String getEntryFileName(String entryname) { if (entryname == null || entryname.trim().length() <= 0) { return null; } int index = entryname.lastIndexOf('/'); String filename = entryname.substring(index + 1, entryname.length()); return filename; } /** * 判断这个 entry 是否是一个文件 * * @param jarentryname * @return */ private static boolean isFile(String jarentryname) { if (jarentryname == null || jarentryname.trim().length() <= 0) { return false; } int index = jarentryname.lastIndexOf('/'); int len = jarentryname.trim().length(); if (index == len - 1) {// directory return false; } if (index == -1) {// 单层目录文件 return true; } if (len > index) {// 多层目录文件 return true; } return true; } }