代码之家  ›  专栏  ›  技术社区  ›  Oak

获取Java源文件的包

  •  2
  • Oak  · 技术社区  · 16 年前

    我的目标是找到Java源文件的包(如字符串),以明文形式给出,而不是在文件夹中进行排序。

    我不能只找到关键字的第一个实例 package 在文件中,因为它可能出现在注释中。所以我考虑了两种选择:

    • 逐字扫描文件,保持扫描仪的“内部注释”标志。第一次 包裹 当不在注释内时遇到关键字,请停止扫描并报告结果。
    • 使用正则表达式应该在理论上是可能的,因为块注释在Java中不是下一个,但我试着做这样的正则表达式,结果证明是相当复杂的——至少对于我来说。

    这两种方法的另一个区别是,当手动扫描时,我可以确定 包裹 关键字不能再出现,节省了一些时间…我不确定我能用正则表达式做些类似的事情。另一方面,“当它不再出现”的决定 is not necessarily simple 尽管我可以用一些启发式的方法。

    我想听听关于这个问题的任何意见,并欢迎有关regex的任何帮助。我的解决方案也是用Java编写的。

    编辑: 对于那些建议实际解析文件的人来说,这绝对是一个可行的选择,谢谢,但是对于我来说,仅仅解析整个文件的包有点过分了。如果没有更简单的选择,我会做的。

    2 回复  |  直到 16 年前
        1
  •  6
  •   tangens    16 年前

    我用Java解析器解决了这个问题。为了我的目的 javaparser 是最合适的。

    CompilationUnit cu = JavaParser.parse( file );
    String packageName = cu.getPackage().getName().toString();
    
        2
  •  1
  •   mdma    16 年前

    可以使用实际的Java源解析程序,比如 javaparser . 它给出了正确解析的Java文件,而不需要重新创建Java解析器或使用穷人的解析器(正则表达式)。

    我看到的唯一缺点是,可能您希望在找到包后立即停止解析,并避免解析文件的其余部分。您可以使用各种各样的方法来实现这一点,但我建议您在考虑这一点之前先考虑一下整个文件的性能。