`
piperzero
  • 浏览: 3479774 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

.java编写库关键字搜索----针对js等库

 
阅读更多
今天开始分析 DWZ框架的源代码,发现单单从txt来看实在是不好分析,各种函数都不是到是哪里定义的...
因为javascript的函数定义方法不像java C++等语言有固定的语法,可以模糊匹配 ..
对于js这样的 函数只能通过关键字搜索代码如下 直接 javac java就可以运行
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* js文件关键字批量搜索..
* 初衷是搜索js..可以针对于所有类型可读文件
* 可以从一个path下的js文件中定位指定关键字.....
* 在分析大规模的js库的时候可以方便定位关键字所在位置..
* @author 岳东卫
*/
public class JFunctionFinder {

public JFunctionFinder() {

}
/**
* 存放搜索结果集合
*/
private Collection<String> col=new ArrayList<String>() ;

/**返回库目录下所有js文件
* @param path js文件所在的路径
* @return 一个目录下的所有文件内容
* @throws Exception
*/
private static File[] getFile(String path) throws Exception{
File f =null;
try{
f=new File(path) ;
}catch (Exception e) {
throw new Exception("路径不存在",e) ;
}
return f.listFiles() ; //js文件集合
}

/**
* 递归遍历
* @param files getFile结果 一个File数组
* @param functionName 要搜索的关键字名字..严格区分大小写
* @return 返回一个function所在位置的集合...
* @throws IOException
*/
private void getFunctionLocation(File[]files,String functionName) throws IOException {
for(File f:files){

//如果是文件夹 那么递归
if(f.isDirectory()){
try {
File []tem=getFile(f.getPath()) ;
this.getFunctionLocation(tem, functionName) ;
} catch (Exception e) {
e.printStackTrace();
}
}

//如果是普通js文件
else{
InputStream is=new FileInputStream(f) ;
byte []bt=new byte[is.available()];
is.read(bt) ;
String contents=new String(bt) ;//默认unicode编码..
Pattern p=Pattern.compile(functionName,Pattern.MULTILINE) ;
Matcher m=p.matcher(contents) ;
if(m.find()){
col.add("["+new String(f.getName())+"]\n") ;
}

}
}
}

/**
* 返回搜索结果
* @return
*/
public Collection<String> getResult(){
return this.col ;
}

/**
* 只需要调用这个函数开始搜索就行.,
* @param path 搜索路径如 D:\lib
* @param functionName 函数名字 严格区分大小
* @return 返回搜索结果的集合 ...
*/
public Collection<String> beginSearch(String path,String functionName){
this.col.add("存在"+functionName+"的库文件是:") ;
try {
File []f=getFile(path) ;
this.getFunctionLocation(f, functionName) ;
} catch (Exception e) {
e.printStackTrace();
}
return col;
}
public static void main(String[] args) throws IOException, Exception {

JFunctionFinder f=new JFunctionFinder() ; //创建一个对象
System.out.println("请输入库文件的路径:");
String path=(new Scanner(System.in)).next() ; //输入路径 如: d:\lib
System.out.println("输入关键字:");
String key=(new Scanner(System.in)).next() ; //输入路径 如: d:\lib
Collection<String> c=f.beginSearch(path, key) ;//返回存在关键字的集合
for(String s:c){
System.out.print(s);
}
}
}
分享到:
评论

相关推荐

    java面试题及技巧3

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题目与技巧1

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    JavaScript笔记

    JavaScript:定义行为和动作 (基于对象和事件驱动的客户端脚本语言;也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是...

    java面试题以及技巧

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧6

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    Java 面试宝典

    10、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? .................................................................................................................................

    JavaScript高级教程

    第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................

    java视频教程Day01 免费

    2. Identifier,keyword and types (标示符, 关键字和数据类型) 3. Expression and Flow Control (表达式和流控制) 4. Array (数组) 5. Object-Oriented Programming I (类与对象I) 6. Object-Oriented ...

    ace.js实现的编辑器

    对于每种支持的语言,ace.js都能提供语法高亮显示,根据语言的特性以不同的颜色和样式来高亮显示代码中的关键字、变量、函数等,使代码更加清晰易读。 ace.js编辑器还具备代码折叠功能,可以将代码块折叠起来,以...

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    搜索“[Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(2/2)”可以下载另外一半 或者直接打开链接“http://download.csdn.net/detail/sfstream6/8240837” 目 录 第1 章 初识Visual Basic 2010...

    Java面试宝典-经典

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    java-imports-search

    注意:为了使java.imports关键字正常工作,需要使用正则表达式搜索模式。 该扩展会自动将java.imports patternType:regexp追加到包含java.imports查询中。 此扩展程序还在import语句行的末尾添加了“查看所有用法”...

    java源码嵌套for循环-AnyaBasic:AnyaBASIC是一种用Java编写的可移植的解释型编程语言。它的语法类似于BASIC,但加

    循环的java源码压缩安雅基础 [A]绝对 [N] 不 [Y] 我们的 [A] 平均 BASIC “可以的小玩具语言。” AnyaBASIC 是一种用 Java 编写的可移植的解释型编程语言。 它的语法类似于 BASIC,但加入了一些 C、Javascript 和 ...

    js笔记.docx

     JavaScript是一种脚本语言 语法和java相似  JavaScript一般用来编写客户端的脚本  JavaScript是一种解释性语言 ,变执行边就是 1. JavaScript的组成 1. ECMAScript标准 语法 变量和数据类型 运算符 逻辑...

    java面试题大全(2012版)

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    Kotlin官方参考文档中文版

    概述 Kotlin 用于服务器端 Kotlin 用于 Android Kotlin 用于 JavaScript Kotlin Native 1.1 的新特性 ...编写 Kotlin 代码文档 使用 Kapt 使用 Gradle 使用 Maven 使用 Ant Kotlin 与 OSGi 编译器插件

Global site tag (gtag.js) - Google Analytics