-1

在 .java 文件上创建类的最有效方法是什么?我有 .java 文件路径,我需要获取类全名。

我只记得:

  1. 用JavaCompiler编译它
  2. 使用文件文本通过 Eclipse ASTParser(或其他)解析它
  3. 通过部分文件路径推断类名,但我不知道这是否适用于所有情况
  4. 不知何故,使用像javap这样的工具(真的没有想过这个)

编辑

我有这个文件,位于C:\myfolder\MyClass.java(让我们忽略包和文件夹关联约定):

package mypackage.mysubpackage;

public class MyClass 
{
    // my class implementation here

    public class MyInnerClass 
    {
        // my inner class implementation here
    } 
}

该文件中声明的类的全名是:

  1. mypackage.mysubpackage.MyClass
  2. mypackage.mysubpackage.MyClass.MyInnerClass(我不知道这个是否正确,但让我们假装是)

当我只有 .java 文件路径 () 时,如何获取这些类C:\myfolder\MyClass.java

4

5 回答 5

1

我有 .java 文件路径,我需要获取类全名。

这意味着,您知道 .java 文件的路径,并且需要每个类文件的类名。

class Filter {

public static void main(String[] a) {
    Filter f = new Filter();
    String dirName = "D:\\Yourfolder\\";  // assuming your java file are located in D:\Yourfolder\
    f.finder(dirName);  // call the method for listing all the class file
}

public File[] finder(String dirName) {

    File dir = new File(dirName);

    return dir.listFiles(new FilenameFilter() {

        public boolean accept(File dir, String filename) {
            if(filename.endsWith(".class"))
            {
            System.out.println(filename);
            }
            return filename.endsWith(".class");

        }
    });

}

}

dirName替换为您的.java目录路径。

于 2012-12-13T13:30:57.787 回答
1

最有效的方法是Class.forName().getName()

于 2012-12-13T13:09:59.283 回答
1

可靠地获取 .java 文件声明的类名称(注意它也可能定义接口)文件的唯一方法是真正解析该文件中包含的 java 语言。

即使这样,您也需要知道将/已使用哪个编译器来编译 .java 文件,因为 java 编译器可以对匿名类使用它喜欢的任何命名约定(Oracle 编译器使用 $1、$2...,但是没有严格的需要模仿这种行为)。

考虑到这些障碍,我认为从 .java 文件内容很难做到这一点,而且仅靠 .java 文件路径根本不可能。

于 2012-12-13T15:53:37.817 回答
0

一种方法是扫描 Java 源文件所在的目录树,对于每个以“.java”结尾的文件,将其完整文件夹路径作为字符串并将每个目录分隔符转换为“。” 特点。这将为您提供完全限定的类名 (FQCN)。例如,如果路径是:com\foo\fee\Foo.java,则变为 com.foo.fee.Foo。

当然,这并没有给你内部或嵌套类和其他高级的东西,但是这些是在你编译时创建的。

我在很多框架中都看到过这种目录扫描,甚至是 Spring。

我正在 Groovy 中处理这个问题,到目前为止我有:

File file = new File(rootSourcePath)

file.eachFileRecurse(FILES){
    def path =it.getAbsolutePath()
    println path

    if(path.endsWith(".java")){
           // to do the conversion here
    }
}

希望这能正确解释您的问题。

于 2013-09-10T00:50:54.980 回答
-1

获取类文件的名称试试这个

      void printClassName(String classname) 


        {

          System.out.println("The class name " + classname +" is " + classname.getClass().getName());

        }
于 2012-12-13T13:29:23.993 回答