Java 从文件夹中选取.class文件

Java 从文件夹中选取.class文件,java,Java,我有一个接口操作符,它有这样一个方法: public interface Operator { double calculate(double firstNumber,double secondNumber); } 然后我有四个类(加、减、除、乘),它们实现了如下运算符: public class Plus implements Operator { public double calculate(double firstNumber,double secondNumbe

我有一个接口操作符,它有这样一个方法:

public interface Operator
{
    double calculate(double firstNumber,double secondNumber);
}
然后我有四个类(加、减、除、乘),它们实现了如下运算符:

public class Plus implements Operator
{   
    public double calculate(double firstNumber,double secondNumber)
    {
        return firstNumber + secondNumber;
    }
}
public class Minus implements Operator
{
    public double calculate(double firstNumber,double secondNumber)
    {
        return firstNumber - secondNumber;
    }
}
等等。。。 对于操作人员,我使用Map:

    private static Map<String,Operator> operatorMap = new HashMap<String,Operator>();
    static
    {
        operatorMap.put("+", new Plus());
        operatorMap.put("-", new Minus());
        operatorMap.put("*", new Multiply());
        operatorMap.put("/", new Divide());
    }
double output = 0;
output = operatorMap.get(elementInExpression[2]).calculate(firstNumber,secondNumber);
private静态映射操作符Map=newhashmap();
静止的
{
运算符map.put(“+”,new Plus());
运算符map.put(“-”,新减号());
运算符map.put(“*”,new Multiply());
运算符map.put(“/”,new Divide());
}
双输出=0;
输出=运算符map.get(elementInExpression[2]).calculate(firstNumber,secondNumber);
现在,我想将我的应用程序更改为动态工作,如果我实现了其他类,如%1,我的应用程序仍然工作。为此,我将.class文件放在一个文件夹中。我想自动从thic.class文件中选择。在我看来,我应该使用反射API。有人能帮我使用这个API吗?(不要使用反射,因为它不是java反射API的一部分)

  • 您需要添加
    公共静态字符串运算符=“*”变量到运算符类
在特定目录中执行此操作
File f=“\\classesfolder\\”;
ClassLoader=新的URLClassLoader(新的URL[]{f.toURI().toURL()},getClass().getClassLoader(););
FilenameFilter筛选器=新建FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
返回名称.endsWith(“.class”);
}
};
用于(文件类文件:f.listFiles(过滤器)){
试一试{
//删除文件扩展名
字符串filename=classFile.getName().substring(0,filename.length()-6);
等级
  • 您需要向运算符类添加
    公共静态字符串运算符=“*”;
    变量
在特定目录中执行此操作
File f=“\\classesfolder\\”;
ClassLoader=新的URLClassLoader(新的URL[]{f.toURI().toURL()},getClass().getClassLoader(););
FilenameFilter筛选器=新建FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
返回名称.endsWith(“.class”);
}
};
用于(文件类文件:f.listFiles(过滤器)){
试一试{
//删除文件扩展名
字符串filename=classFile.getName().substring(0,filename.length()-6);

类..抱歉,这部分代码做什么?Classit删除文件。类扩展名并加载实现运算符@Kael53的类抱歉,我是java新手,我无法理解你的应用程序例如,它的部分:For(文件classFile:f.listFiles(新文件名过滤器(){public boolean accept(文件目录,字符串名){return name.endsWith(“.class”);}}})它通过扩展名过滤文件,只获取带有.class的文件。没问题,兄弟,每个人都是新的,因为你的状态是内部的,所以对我来说,它变得如此复杂,我无法分离状态对不起,这部分代码做什么?Classit删除文件。类扩展名并加载实现运算符@Kael53的类对不起,我是java新手,我不能例如,了解你的应用程序的部分:For(文件classFile:f.listFiles(新文件名过滤器(){public boolean accept(文件目录,字符串名){return name.endsWith(“.class”);}})它通过扩展名过滤文件,只获取带有.class的文件。没问题,兄弟,每个人都是新的,因为你的文件是内部的,所以对我来说,它变得如此复杂,我无法分离文件
File f = "\\classesfolder\\";

ClassLoader loader = new URLClassLoader(new URL[] { f.toURI().toURL() }, getClass().getClassLoader(););

FilenameFilter filter = new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".class");
    }
  };
for (File classFile : f.listFiles(filter)) {
    try {
        // Remove the file extension
        String filename = classFile.getName().substring(0, filename.length() - 6);
        Class<? implements Operator> cls = loader.loadClass(filename);
        Operator operatorClass = (Operator) cls.newInstance();
        operatorMap.put(operatorClass.operator, operatorClass);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}