簡體   English   中英

如何在Java中獲取包括包名的當前類名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM