正如描述所說:如何獲得給定包名的所有Java類文件的列表。如何獲取Java中特定包中的所有Class文件?
1
A
回答
3
我在這裏看到了很多關於SO和其他站點的問題和方法,以查找特定Java包中的所有類。大多數解決方案都不適合我。有時他們使用Jar文件,但不使用文件夾中的「普通」Java項目(比如IDE的方式)或其他方式。因此,我將所有這些代碼片段放在一起,形成了一個解決方案,無論代碼是在Jar文件中還是在普通文件夾結構中,它都可以用於我(開箱即用)。
這非常簡單:您給方法getClassesInPackage
要檢查的包的名稱,您將獲得此包中所有類的列表。目前沒有任何例外是有規律的「消費」。
玩得開心!以下是代碼:
public static final List<Class<?>> getClassesInPackage(String packageName) {
String path = packageName.replaceAll("\\.", File.separator);
List<Class<?>> classes = new ArrayList<>();
String[] classPathEntries = System.getProperty("java.class.path").split(
System.getProperty("path.separator")
);
String name;
for (String classpathEntry : classPathEntries) {
if (classpathEntry.endsWith(".jar")) {
File jar = new File(classpathEntry);
try {
JarInputStream is = new JarInputStream(new FileInputStream(jar));
JarEntry entry;
while((entry = is.getNextJarEntry()) != null) {
name = entry.getName();
if (name.endsWith(".class")) {
if (name.contains(path) && name.endsWith(".class")) {
String classPath = name.substring(0, entry.getName().length() - 6);
classPath = classPath.replaceAll("[\\|/]", ".");
classes.add(Class.forName(classPath));
}
}
}
} catch (Exception ex) {
// Silence is gold
}
} else {
try {
File base = new File(classpathEntry + File.separatorChar + path);
for (File file : base.listFiles()) {
name = file.getName();
if (name.endsWith(".class")) {
name = name.substring(0, name.length() - 6);
classes.add(Class.forName(packageName + "." + name));
}
}
} catch (Exception ex) {
// Silence is gold
}
}
}
return classes;
}
+1
爲什麼口袋妖怪例外? – JacksOnF1re 2015-02-23 16:13:30
+0
引發異常的地方應根據代碼的用途插入自己的代碼。僅僅在一個實例化錯誤上退出整個探索可能並不總是足夠的。可以輸出一個調試消息或做其他有用的東西。 – mythbu 2015-02-25 10:01:12
相關問題
- 1. 如何在Java中獲取.class的所有屬性?
- 2. 有沒有辦法從.java文件中獲取.class文件
- 3. 如何獲取Java文件夾中的所有文件
- 4. Java - 如何獲取文件夾中的所有文件名
- 5. 如何從java中的異常stackTrace中獲取特定的包
- 6. 如何從文件中獲取特定行中的特定值?
- 7. 如何從java中的.class文件獲取實例
- 8. 獲取gitpython中的特定文件的所有修訂
- 9. 如何「觸摸」包含特定頭文件的所有文件?
- 10. 讀取matlab中特定文件夾中的所有文件?
- 11. 如何從特定文件夾(iPhone)獲取所有圖像?
- 12. 獲取包含特定字符串的特定文件夾中的文件
- 13. java - 如何解壓zip文件的特定目錄中的所有文件?
- 14. java如何從xml文件中獲取所有元素名稱
- 15. 獲取特定包內的文件
- 16. 如何獲取包含所有子目錄文件的目錄中的文件?
- 17. 如何獲取給定目錄中的所有文件名
- 18. 如何從特定目錄中獲取具有特定擴展名的所有文件的列表?
- 19. 從twitter獲取包含特定單詞的所有推文
- 20. java中的.class文件如何在幾乎所有的環境中運行
- 21. 如何獲取特定ListView列的所有行中的值?
- 22. 如何獲取特定的DLL中的所有類,瀏覽OpenFileDialog
- 23. 如何從目錄中獲取文件特定的文件名?
- 24. SBT:如何定義包含特定路徑中所有文件的includeFilter?
- 25. 如何獲取特定網站中的所有頁面鏈接?
- 26. 如何獲取列表中特定類型的所有對象?
- 27. 如何從XML中的特定標記獲取所有值?
- 28. 如何從xml中獲取特定節點的所有值?
- 29. 如何獲取特定Facebook相冊中的所有照片?
- 30. 如何獲取特定過程中存在的所有實體?
這不是問題。也許你應該將問題編輯爲適當的問題,並將答案作爲答案發布。 – Eran 2015-02-23 16:11:00
我知道。我在問答功能方面遇到了一些麻煩。我只想分享這段代碼片段,因爲這個社區幫助我解決了這個問題...... – mythbu 2015-02-23 16:12:53