如何在Java中获取包括包名在内的当前类名?

2022-08-31 10:59:29

我正在研究一个项目,一个要求是,如果main方法的第二个参数以“”开头(对于linux),它应该将其视为绝对路径(不是问题),但如果它不是以“”开头,它应该获取类的当前工作路径并附加给定的参数。//

我可以通过多种方式获得类名:、和、等等...System.getProperty("java.class.path")new File(".")getCanonicalPath()

问题是,这只给了我存储包的目录 - 也就是说,如果我有一个类存储在“”中,它只会给我“”,并忽略实际存在的包名称。.../project/this/is/package/name/project/.class files

有什么建议吗?

编辑:这是解释,取自练习描述

sourcedir 可以是绝对的(以“/”开头),也可以是相对于我们运行程序的位置

sourcedir 是 main 方法的给定参数。我怎样才能找到那条路?


答案 1

用于获取完整的类名。this.getClass().getCanonicalName()

请注意,包/类名(“a.b.C”)与.class文件的路径(a/b/C.class)不同,并且使用包名/类名派生路径通常是不好的做法。类文件/包的集合可以位于多个不同的类路径中,可以是目录或 jar 文件。


答案 2

有一个类 Class 可以做到这一点:

Class c = Class.forName("MyClass"); // if you want to specify a class
Class c = this.getClass();          // if you want to use the current class

System.out.println("Package: "+c.getPackage()+"\nClass: "+c.getSimpleName()+"\nFull Identifier: "+c.getName());

如果表示包中的类,上面的代码将打印:cMyClassmypackage

包: mypackage
类: MyClass
完整标识符: mypackage.我的类

您可以获取此信息并根据需要对其进行修改,或者转到检查API以获取更多信息。


推荐