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();
}
}