Usage: java JSearch -t str [-options]
options:
-d directory è¦æ¥æ¾çåç®å½ï¼é»è®¤æ¯å½åç®å½
-f file è¦æ¥æ¾çæ件ï¼é»è®¤æætxtåsqlæ件ï¼æ¯ææ£å
-t targetStr å°è¦æ¥æ¾çç®æ å符串ï¼ä¸å¯ç©ºï¼æ¯ææ£å
-c charset å符ç¼ç
-r éå½æ¥æ¾åç®å½
示ä¾ï¼
java JSearch -t t00ls
java JSearch -t t00ls -d /root/test/txt -f .*\.txt -c gbk -r
package pw.tly.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JSearch {
private static String path = "";
private static String filename = ".*\\.(txt|sql)";
private static String targetStr = "";
private static String charset = "";
private static boolean isSearchSubdirectory = false;
private static String usage = "Usage: java JSearch -t str [-options]\noptions:\n\t -d directory\t è¦æ¥æ¾çåç®å½ï¼é»è®¤æ¯å½åç®å½\n\t -f file\t è¦æ¥æ¾çæ件ï¼é»è®¤æætxtåsqlæ件ï¼æ¯ææ£å\n\t -t targetStr\t å°è¦æ¥æ¾çç®æ å符串ï¼ä¸å¯ç©ºï¼æ¯ææ£å\n\t -c charset\t å符ç¼ç \n\t -r\t\t éå½æ¥æ¾åç®å½\n示ä¾ï¼\njava JSearch -t t00ls\njava JSearch -t t00ls -d /root/test/txt -f .*\\.txt -c gbk -r";
public static void main(String[] args) {
if(!parseArgs(args)){
return;
}
List<File> list = getFiles(path, filename, isSearchSubdirectory);
find(list);
}
/**
* å¨æ件ä¸æ¥æ¾å符串并è¾åº
* @param list æ件å表
*/
private static void find(List<File> list) {
for (File file : list) {
String result = find(file.getAbsolutePath());
if("".equals(result)){
continue;
}
System.out.println("**********å¨" + file.getAbsolutePath() + "ä¸æ¾å°ï¼**********");
System.out.println(result);
}
}
/**
* å¨æ件ä¸æ¥æ¾å符串
* @param filename æ件路å¾
* @return æ¥æ¾ç»æ
*/
private static String find(String filename) {
if(targetStr == null || targetStr.length() == 0) {
throw new RuntimeException("ç®æ å符串ä¸è½ä¸ºç©º");
}
BufferedReader br = null;
InputStreamReader isr = null;
FileInputStream fis = null;
String line = null;
String result = "";
try {
fis = new FileInputStream(filename);
isr = "".equals(charset) ? new InputStreamReader(fis) : new InputStreamReader(fis, charset);
br = new BufferedReader(isr);
Pattern pattern = Pattern.compile(targetStr);
while((line = br.readLine()) != null){
Matcher matcher = pattern.matcher(line);
if(matcher.find()){
result += line + "\n";
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
System.out.println("ç¼ç æ æ");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(isr != null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* è·åæä¸è·¯å¾ä¸çææ符åæ¡ä»¶çæ件
* @param path è·¯å¾
* @param filename æ件åè¿æ»¤æ¡ä»¶
* @param isSearchSubdirectory æ¯å¦æ¥æ¾åç®å½
* @return æ件å表
*/
private static List<File> getFiles(String path, final String filename, boolean isSearchSubdirectory) {
List<File> result = new ArrayList<File>();
File file = new File(path).getAbsoluteFile();
if(!file.exists()){
return result;
}
if(file.isFile()){
result.add(file);
return result;
}
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if(!file.getAbsoluteFile().isDirectory()){
if("".equals(filename)){
return true;
}
if(file.getAbsoluteFile().getName().matches(filename)){
return true;
}
}
return false;
}
});
result.addAll(Arrays.asList(files));
if(isSearchSubdirectory){
File[] directorys = file.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if(file.getAbsoluteFile().isDirectory()){
return true;
}
return false;
}
});
for (File directory : directorys) {
List<File> list = getFiles(directory.getAbsolutePath(), filename, isSearchSubdirectory);
result.addAll(list);
}
}
return result;
}
/**
* 解æåæ°
* @param args åæ°æ°ç»
* @return 解ææ¯å¦æå
*/
private static boolean parseArgs(String[] args) {
if(args.length == 0){
System.out.println(usage);
return false;
}
try {
for (int i = 0; i < args.length; i++) {
if("-d".equals(args[i])){
path = args[i + 1];
}
if("-f".equals(args[i])){
filename = args[i + 1];
}
if("-t".equals(args[i])){
targetStr = args[i + 1];
}
if("-c".equals(args[i])){
charset = args[i + 1];
}
if("-r".equals(args[i])){
isSearchSubdirectory = true;
}
}
if("".equals(targetStr)){
System.out.println("请ç¨-tåæ°æå®è¦æ¥æ¾çå符串");
return false;
}
return true;
} catch (Exception e) {
System.out.println(usage);
return false;
}
}
}