I change and use it often, so better have it as a post, rather than in SVN.
package com.pierre.jar;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
public class JarSearcher {
private static final String BASEDIR = "C:\\ac,e\\repository\\central\\libs";
//private static final String BASEDIR = "C:\\Temp";
static FileWriter fstream ;
static BufferedWriter out;
public static void main(String[] args) throws Exception {
fstream = new FileWriter("c:\\out.txt");
out = new BufferedWriter(fstream);
JarSearcher jarSearcher = new JarSearcher();
jarSearcher.findTest(BASEDIR, "");
out.flush();
out.close();
}
private void findTest(String dirString, String text) throws ZipException, IOException {
File dir = new File(dirString);
for (File f : dir.listFiles()) {
if (f.isDirectory()) {
findTest(f.getAbsolutePath(), text);
}
else {
String name = f.getName();
if (name.endsWith(".jar") || name.endsWith(".zip")) {
System.out.println("SEARCHING " + f.getAbsolutePath());
out.write("===" + f.getAbsolutePath() + "===\n");
try {
ZipFile zipFile = new ZipFile(f);
Enumeration e = zipFile.entries();
while (e.hasMoreElements()) {
ZipEntry nextElement = e.nextElement();
InputStream is = zipFile.getInputStream(nextElement);
if (text.length() == 0 || findInInputStream(is, text)) {
System.out.println("FOUND ENTRY " + nextElement.getName() + " in file " + f.getAbsolutePath());
out.write(nextElement.getName() + "\n");
}
}
}
catch (Exception e) {
e.printStackTrace();
}
out.write("\n\n");
}
else {
}
}
}
}
private boolean findInInputStream(InputStream is, String text) throws IOException {
boolean result = false;
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while ( (line = br.readLine()) != null && result == false) {
if (line.contains(text)) {
result = true;
}
}
br.close();
is.close();
return result;
}
}
No comments:
Post a Comment