写了一段检查jar是不是1.6编译的groovy脚本,没有优化,效率很差,记在这里备忘。
import java.io.*;
import java.util.*;
import java.util.zip.*;
class JarVersionChecker{
def checkJdk6(String folder){
println "begin checking ${folder}...\n\n";
File f = new File(folder);
int i = 1;
String[] files = f.list();
for(String s : files){
println "\tnow is ${i}/${files.length},${s}"
if(s.endsWith(".jar")){
if(isJdk6(folder+"/"+s)){
println "${s} is a jdk6 compiled jar."
}
}
i++;
}
println "\n\nend checking ${folder}...\n\n";
}
def isJdk6(String jarFile){
String s = getFirstClassByte(jarFile);
if(s==null||s.length()<16) return false;
String v = s.substring(14,16);
return "32".equals(v);
}
def getFirstClassByte(String jarFile){
InputStream is = getFirstClassInputStream(jarFile);
if(is == null) return "";
byte[] b = new byte[is.available()];
is.read(b);
is.close();
return byte2hex(b);
}
def getFirstClassInputStream(String jarFile){
ZipFile zf = new ZipFile(jarFile);
for(ZipEntry z : zf.entries()){
if(z.toString().endsWith("class")){
InputStream zin = zf.getInputStream(z);
return zin;
}
}
return null;
}
def byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
}
//=====================================================================
def jvc = new JarVersionChecker();
println jvc.checkJdk6("d:/temp/ggg");