是否有任何命令行函数可以从一个巨大的Java文件中返回主类的名称?

是否有任何命令行函数可以从一个巨大的Java文件中返回主类的名称?,java,automation,Java,Automation,我想自动化从internet下载大量Java文件的过程,并逐个进行测试。但是,大多数站点没有指定主类的名称。因此,大多数时候,我需要手动搜索字符串“public class”,以确定文件名。有没有更好的流程 通常,代码格式为: import ... import ... import ... class A {...} class B {...} public class C {...} 上面的命令将返回一个包含main方法的.java文件列表,它只是表示每个程序的主类 如上所述,公共类不一

我想自动化从internet下载大量Java文件的过程,并逐个进行测试。但是,大多数站点没有指定主类的名称。因此,大多数时候,我需要手动搜索字符串“public class”,以确定文件名。有没有更好的流程

通常,代码格式为:

import ...
import ...
import ...

class A {...}
class B {...}
public class C {...}
上面的命令将返回一个包含main方法的.java文件列表,它只是表示每个程序的主类

如上所述,公共类不一定意味着它是程序的主类,因此我相信上面的grep命令是您在这种情况下的最佳机会


还请注意,在同一个应用程序/程序中,可能有多个类包含一个主方法,即使只有一个实际用作程序的入口点。

是什么让你认为,如果一个类是公共的,那么它就意味着它实际上是主类?我认为您应该使用smth来搜索main方法,比如
grep“public static void main”*。java
我建议您使用
grep
@funkyjelly是的,我同意。但是,是否有任何内置函数可以实现同样的功能?不,我不这么认为。如果你只有原始的源代码文件,你最好的机会就是使用像
grep
这样的文本搜索工具。我相信为什么会被否决?这很接近。但是,请将行更改为:
grep-lP'\s*public\s+static\s+void\s+main\s*\(\s*(?:\[\s*\]\s*)?String\s*(?:\[\s*\])?\s*\w+\s*\)*。java
这列出了所有文件名,可以从中减去“.java”。好的。非常感谢@TreffnonX的建议。处理单词之间的额外空格和各种排序非常好。不确定是否会被否决,但我猜这是另一位回答者的回答:)@Paul这是真的,但您之前提到了“Java规范”约定,而现在你遇到了一个非常极端的情况,这将使OP的任务无法解决,因为他需要搜索甚至不存在的smth。@Paul我从未声称我的答案解决了所有情况。我更愿意提到这是实现OP所需的“最佳机会”,并强调了可能存在的陷阱。
grep -lP '\s*public\s+static\s+void\s+main\s*\(\s*(?:\[\s*\]\s*)?String\s*(?:\[\s*\])?\s*\w+\s*\)' *.java