获取当前的类名称,包括包

时间:2012-03-15 22:35:20

标签: java eclipse

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

我可以通过多种方式获取课程名称:System.getProperty("java.class.path")new File(".")getCanonicalPath()等等。

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

有什么建议吗?

编辑: 以下是从练习描述

中获得的解释
  

sourcedir可以是绝对的(以“/”开头)或相对于我们从

运行程序的位置

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

4 个答案:

答案 0 :(得分:142)

使用this.getClass().getCanonicalName()获取完整的班级名称。

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

答案 1 :(得分:23)

有一个类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());

如果c代表包MyClass中的班级mypackage,则会打印上述代码:

  

包装:mypackage
  分类:MyClass
  完整标识符:mypackage.MyClass

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

答案 2 :(得分:11)

完全限定名称的操作如下:

String fqn = YourClass.class.getName();

但是您需要读取类路径资源。所以使用

InputStream in = YourClass.getResourceAsStream("resource.txt");

答案 3 :(得分:2)

使用this.getClass().getName()获得packageName.className并使用this.getClass().getSimpleName()获得类名