[英]How to get current class name including package name in Java?
我正在研究一個項目,一個要求是如果main方法的第二個參數以“ /
”開頭(對於linux),它應該將它視為絕對路徑(不是問題),但如果它不是以“ /
”,它應該獲取類的當前工作路徑並將其附加到給定的參數。
我可以通過幾種方式獲取類名: System.getProperty("java.class.path")
, new File(".")
和getCanonicalPath()
等等......
問題是,這只給了我存儲包的目錄 - 即如果我有一個類存儲在“ .../project/this/is/package/name
”中,它只會給我“ /project/
“並忽略實際.class files
所在的包名稱。
有什么建議?
編輯:這是解釋,取自練習說明
sourcedir可以是絕對的(以“/”開頭)或相對於我們運行程序的位置
sourcedir是main方法的給定參數。 我怎么能找到那條路?
使用this.getClass().getCanonicalName()
來獲取完整的類名。
請注意,包/類名(“abC”)與.class文件(a / b / C.class)的路徑不同,並且使用包名/類名來派生路徑通常是不好的做法。 類文件/包的集合可以在多個不同的類路徑中,這些路徑可以是目錄或jar文件。
有一個類, 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
代表mypackage
包中的MyClass
類,則上面的代碼將打印出來:
包裝:mypackage
分類:MyClass
完整標識符:mypackage.MyClass
您可以獲取此信息並根據需要進行修改,或者查看API以獲取更多信息。
完全限定名稱的運行方式如下:
String fqn = YourClass.class.getName();
但是您需要讀取類路徑資源。 所以使用
InputStream in = YourClass.getResourceAsStream("resource.txt");
使用this.getClass().getName()
獲取packageName.className
並使用this.getClass().getSimpleName()
只獲取類名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.