2010-11-13 103 views
2

我不知道如果我在這裏使用的是正確的術語..但如果我的包的名稱設置如下:清單類在包的子目錄

com.example.fungame 
    -ClassA 
    -ClassB 
    -com.example.fungame.sprite 
     -ClassC 
     -ClassD 

我如何編程方式獲得一個數組(一個Class[]我猜)在.sprite子目錄中的所有類?

+0

不知道我理解的問題。你沒有目錄中的類,你有文件。那麼你在問如何實例化這些文件所代表的類,並將每個類的實例放入數組中?順便說一句,即使這是可能的,它可能必須是一個Object []',除非它們從一個不太常規的類共享繼承。 – klactose 2010-11-13 20:00:47

+0

這個問題之前已經被問過很多次了,其中之一就是這樣一個:[從類路徑中的java包中讀取所有類](http://stackoverflow.com/questions/1456930/read-all-classes-from-java- package-in-classpath) – 2010-11-13 20:09:07

+0

klactose,我沒有提到實例化它們。並回應「你沒有目錄中的課程,你有文件」..你認爲文件位於哪裏?這是正確的..一個目錄! seanizer,你應該發佈你的回答作爲答案。 – Snailer 2010-11-13 20:50:45

回答

0

試試這個方法:

public static Class[] getClasses(String pckgname) throws ClassNotFoundException { 
    ArrayList classes=new ArrayList(); 
    File directory = null; 
    try { 
     directory = new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace('.', '/')).getFile()); 
    } catch(NullPointerException x) { 
     throw new ClassNotFoundException(pckgname + " does not appear to be a valid package"); 
    } 
    if (directory.exists()) { 
     // Get the list of the files contained in the package 
     String[] files = directory.list(); 
     for (int i = 0; i < files.length; i++) { 
      // we are only interested in .class files 
      if(files[i].endsWith(".class")) { 
       // removes the .class extension 
       try { 
        Class cl = Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6)); 
        classes.add(cl); 
       } catch (ClassNotFoundException ex) { 
       } 
      } 
     } 
    } else { 
     throw new ClassNotFoundException(pckgname + " does not appear to be a valid package"); 
    } 
Class[] classesA = new Class[classes.size()]; 
classes.toArray(classesA); 
return classesA; 
} 
+0

我嘗試了幾次這個子目錄,甚至是'getPackageName()',但它總是拋出'ClassNotFoundException' – Snailer 2010-11-13 20:43:49