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

问题描述 投票:0回答:5

我正在开发一个项目,一个要求是如果主方法的第二个参数以“

/
”(对于linux)开头,它应该将其视为绝对路径(不是问题),但如果不是以“
/
”开头,它应该获取类的当前工作路径,并向其附加给定的参数。

我可以通过多种方式获取类名:

System.getProperty("java.class.path")
new File(".")
getCanonicalPath()
等等...

问题是,这只会给我存储包的目录 - 即,如果我有一个类存储在“

.../project/this/is/package/name
”中,它只会给我“
/project/
”并忽略实际包名称
.class files
还活着。

有什么建议吗?

编辑: 这是摘自练习描述的解释

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

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

java eclipse package classname
5个回答
200
投票

使用

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

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


34
投票

有一个类,

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

您可以获取此信息并根据需要进行修改,或者前往检查 API 了解更多信息。


16
投票

完全限定名称的获取方式如下:

String fqn = YourClass.class.getName();

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

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

10
投票

使用

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


0
投票

从 Java9 开始,这个问题的答案是:Clazz.class.getPackage()

package com.demo;

public class ExampleClass {

    public static void main(String[] args) {
        Package package = ExampleClass.class.getPackage();
        if (package != null) {
            System.out.println("Package name: " + package.getName());
        } else {
            System.out.println("This class is not in a package.");
        }
    }
}

输出:

Package name: com.demo
© www.soinside.com 2019 - 2024. All rights reserved.