2013-07-09 90 views
0

我該如何去掃描文件夾中的name.class文件,然後將它們加載到程序中進入數組列表。Java - 搜索一個文件夾並加載.class文件

我對我需要它做什麼有一個總體的想法,我只是不知道我需要用什麼來在代碼中實現它。

掃描文件夾 找到加載的.class文件 使用array.add(new class(params))將類添加到ArrayList中; 畢竟運行了類中的方法。

這是當前情況下我都能加載模塊(如果他們甚至被稱爲是)到客戶端

package pro.skid.Gabooltheking.Module; 

import java.util.ArrayList; 

public class ModuleLoader { 

    public static ArrayList<Module> module = new ArrayList<Module>(); 
    public final ArrayList<Module> getModule(){ return module; } 

    public static void startModule(){ 
     module.clear(); 
    } 

     public final Module getModuleByName(String moduleName){ 
      for(Module module : getModule()){ 
       if(module.getName().equalsIgnoreCase(moduleName)){ return module; } 
      } 
      return null; 
     } 

     public static void keyBind(int key){ 
      for(Module m : module){ 
       if(m.getKey() == key){ 
        m.toggle(); 
       } 
      } 
     } 

     public static void runModuleTick(){ 
      for(Module m : module){ 
       if(m.getState()){ 
        m.onTick(); 
       } 
      } 
     } 

} 

這是抽象的模塊類看起來像

package pro.skid.Gabooltheking.Module; 

public abstract class Module { 

    int key,color; 
    String name; 
    boolean state; 

    /** 
    * Set's the following variables 
    * @param name- name of mod 
    * @param key- keybind for mod 
    * @param color- color in gui 
    */ 
    public Module(String name, int key, int color){ 
     this.name = name; 
     this.key = key; 
     this.color = color; 
    } 
    /** 
    * Set's the state of the mod to on or off. 
    */ 
    public void toggle() 
    { state = !state; 
     if(this.getState()) 
      { 
      this.onToggle(); 
      }else{ 
      this.onDisable(); 
     } 
    } 
    /** 
    * Does something when mod is first toggled. 
    * Does it only once. 
    */ 
    public abstract void onToggle(); 

    /** 
    * Does something when mod is disabled. 
    * Does it only once. 
    */ 
    public abstract void onDisable(); 

    /** 
    * Does something when mod is toggled. 
    * Loops untill hack is disabled. 
    */ 
    public abstract void onTick(); 


    public String getName(){return this.name; } 
    public int getKey(){ return this.key; } 
    public int getColor(){ return this.color; } 
    public boolean getState(){ return this.state; } 
} 
系統

在我看來,所有的幫助都是很好的幫助。還要忽略蹩腳的評論,這對我來說更重要的是要記住每種方法的作用。

+1

似乎你正在重新發明一個類加載器?你爲什麼需要這樣做? – Ayman

+0

這不是我最初的目標。目前我加載mod的方法是手動將它們添加到.jar中,並通過module.add(new class(params))手動將它們添加到arraylist中;我希望它只是將.class文件放到文件夾中,它會自動加載它們,而不需要我自己添加任何.class文件。 – user2563088

+1

如果該文件夾位於類路徑中,則簡單的Class.forName將爲您加載該類。 – Ayman

回答

0

您可以使用Apache commons IOUtils及其篩選器之一遞歸地瀏覽目錄,並根據名稱或擴展名匹配文件。

如果不需要外部依賴項,那麼標準庫java.io.File也包含幾個可能使用的列表方法。