检查文件是否为Java源文件的好方法

检查文件是否为Java源文件的好方法,java,file,analysis,Java,File,Analysis,我有一个表示Java源文件的模型对象 它有这样一个构造函数: private SourceFile(File file) 我希望这个构造函数能够确保(尽可能多地)它所提供的文件实际上是一个Java源代码 我有一个批处理操作,需要很多文本文件。其中一些是Java源代码,我想这不是区分它们的好方法(除了文件扩展名) 那么,以前有人遇到过这种情况吗?你能推荐一种检查合理性的好方法吗(不是有效性,我需要编译有效性检查)?我会做两件事: 检查文件是否以.java结尾 检查文件是否声明了与文件同名的类(请

我有一个表示Java源文件的模型对象

它有这样一个构造函数:

private SourceFile(File file)
我希望这个构造函数能够确保(尽可能多地)它所提供的
文件实际上是一个Java源代码

我有一个批处理操作,需要很多文本文件。其中一些是Java源代码,我想这不是区分它们的好方法(除了文件扩展名)

那么,以前有人遇到过这种情况吗?你能推荐一种检查合理性的好方法吗(不是有效性,我需要编译有效性检查)?

我会做两件事:

  • 检查文件是否以
    .java
    结尾
  • 检查文件是否声明了与文件同名的
    类(请参阅)


  • 这取决于你想要的准确度。如果你想要100%,你必须编译它。如果您对一些较低的内容感到满意,您可以检查可打印字符。通过重点工作检查可达到合理水平。等等…

    使用,在给定的链接上是如何使用它的。但是在Java 1.6中,编译器在JDK中有一个API构建,通过它您可以访问。您不必编译它,但可以尝试解析它。如果它是可解析的,我想可以安全地假设您处理的是Java源文件。如果您编译并接收到错误,那么它就不是Java文件(我的意思是,至少我希望它能正常工作),但是如果他正在编写编译器或解释器,那么该文件可能包含语法错误。这些文件是否包含Java代码片段或片段,或者它们是语法正确的java类?由于编译器包含语法检查,这将是最好的方法。这并不能确保它是java源文件。有许多语言都有“公共类”关键字。我猜他不想依赖文件扩展名。顺便说一下:这可能是一个评论!但是,有多少不是java的语言的文件以
    .java
    结尾,并且包含
    公共类
    声明?我没有想到,但我保证“公共类”是不够的。另一方面,你实际上不需要类是公共的(在Java中),如果你只搜索关键字“class”,它也可以是Scala。你是对的,Java类不必是公共的,我更新了我的答案。我不知道scala,但我对web的肤浅搜索告诉我,它们通常不会保存为.java文件。这可能是一个注释!这不是评论。这就是答案。因为问题不在“是非”布尔字段中。问题是什么可以被视为java文件。答案取决于考虑点。所以,我把这件事提请西蒙注意,让他明白没有简单的答案。克罗津在你面前用完全相同的观点写了一篇评论,他发表了评论。不,他只提出了一个命题。此外,这也很好,它并没有表明这不是一个技术问题,而是取决于Simeon试图解决的问题。即使文件被成功解析,它也可能永远不会被编译,这意味着它可能是java,也可能不是java。您可以添加第二个命题作为注释。这看起来正是我需要的,谢谢。我会在尝试时更新它out@Simeon如果这是您的解决方案,请接受答案;)@Simeon如果答案看起来正是你需要的,那么接受答案,这是一个好习惯。@marekrendel一旦我能够确认答案是我需要的,而不是看起来像我需要的,我就会接受答案。你可以通过我的个人资料来判断我的接受率,是的,我(考虑到我在这里的4年)读过什么是好的实践:)但我会考虑你的建议。。。