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

La *_*bla 72 java eclipse classname package

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

我可以通过多种方式获取类名/,/System.getProperty("java.class.path")等..

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

有什么建议?

编辑:这是解释,取自练习说明

sourcedir可以是绝对的(以"/"开头)或相对于我们运行程序的位置

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

The*_*ail 149

使用this.getClass().getCanonicalName()来获得完整的类名.

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


Jon*_*and 25

有一个类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());
Run Code Online (Sandbox Code Playgroud)

如果在包中c表示类,则上面的代码将打印:MyClassmypackage

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

您可以获取此信息并根据需要进行修改,或者查看API以获取更多信息.

  • 请注意,Class.forName("MyClass") 仅在默认包中(即没有包声明)时才起作用。 (2认同)
  • @TheNail为true,`getName()`返回包名和类名,现在编辑. (2认同)
  • 您应该使用 `MyClass.class` 而不是 `Class.forName("MyClass")`,除非由于其他原因确实需要运行时发现。 (2认同)

Boz*_*zho 11

完全限定名称的运行方式如下:

String fqn = YourClass.class.getName();
Run Code Online (Sandbox Code Playgroud)

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

InputStream in = YourClass.getResourceAsStream("resource.txt");
Run Code Online (Sandbox Code Playgroud)


Md.*_*lam 8

usethis.getClass().getName()来获取packageName.className和 usethis.getClass().getSimpleName()只获取类名