首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中获取当前的类名,包括包名?

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

Stack Overflow用户
提问于 2012-03-16 06:35:20
回答 4查看 151.5K关注 0票数 91

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

我可以通过几种方式获取类名:System.getProperty("java.class.path")new File(".")getCanonicalPath(),等等……

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

有什么建议吗?

编辑:这是从练习描述中摘录的解释

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-16 06:39:33

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

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

票数 181
EN

Stack Overflow用户

发布于 2012-03-16 06:43:34

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

代码语言:javascript
复制
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表示包mypackage中的类MyClass,则上面的代码将打印:

包: mypackage

类: MyClass

完整标识符: mypackage.MyClass

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

票数 32
EN

Stack Overflow用户

发布于 2012-03-16 06:47:47

全限定名的取值如下:

代码语言:javascript
复制
String fqn = YourClass.class.getName();

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

代码语言:javascript
复制
InputStream in = YourClass.getResourceAsStream("resource.txt");
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9729197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档