获取在.java文件上创建的类的最有效方法是什么?我有.java文件路径,我需要获取类的全名。
我只记得:
修改
我有这个文件,位于C:\myfolder\MyClass.java
(让我们忽略包和文件夹关联约定):
package mypackage.mysubpackage;
public class MyClass
{
// my class implementation here
public class MyInnerClass
{
// my inner class implementation here
}
}
此文件中声明的类的全名是:
mypackage.mysubpackage.MyClass
mypackage.mysubpackage.MyClass.MyInnerClass
(我不知道是否这样
一个是正确的,但让我们假装它是)当我只有.java文件路径(C:\myfolder\MyClass.java
)时,如何获得这些类?
答案 0 :(得分:1)
最有效的方法是Class.forName().getName()
答案 1 :(得分: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
目录路径。
答案 2 :(得分:1)
可靠地获取类名称(介意它也可能定义接口)文件.java文件声明的唯一方法是真正解析该文件中包含的java语言。
甚至然后你需要知道将使用哪个编译器来编译.java文件,因为java编译器可以使用它对匿名类的任何命名约定(Oracle编译器使用$ 1,$ 2 ......,但没有严格的需要模仿这种行为)。
考虑到这些障碍,我认为从.java文件内容中很难做到,而单独使用.java文件路径是不可能的。
答案 3 :(得分:0)
一种方法是扫描Java源文件所在的目录树,对于以“.java”结尾的每个文件,将其完整文件夹路径作为String并将每个dir分隔符转换为“。”。字符。这将为您提供完全限定的类名(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
}
}
希望这能正确地解释你的问题。
答案 4 :(得分:-1)
获取类文件的名称试试这个
void printClassName(String classname)
{
System.out.println("The class name " + classname +" is " + classname.getClass().getName());
}