在不知道Java中特定文件夹中的名称的情况下加载类

埃桑·索里莫(Ehsan Solimo)

我有一个Java应用程序,可以在文件中执行一些操作并释放结果输出。并且我想添加一个属性,以便使用我的应用的每个人都可以添加他/她的特定运算符。并且知道我想在不知道其名称或方法的情况下加载类。

这是我的课程,我知道可能要添加的课程和方法名称:

public class PathGetter {

public static void main(String[] args) {
    try{
        String AbsolutePath = args[0];
        AbsolutePath += "\\in.txt";

        String SecondFilePath = args[1];
        SecondFilePath += "\\out.txt";

        File file = new File(SecondFilePath);
        file.createNewFile();
        FileWriter writer = new FileWriter(file);

        FileReader fr = new FileReader();
        Object newOp = null;
        String newOpSign="!@#$%^&*";
        Method m = null;

        MathOperations mathOperations = new MathOperationsImpl();

        System.out.println("Do you have new operator? ");
        Scanner scanner1 = new Scanner(System.in); 

        if(scanner1.nextBoolean()==true){
            Scanner scanner2 = new Scanner(System.in);
            System.out.println("Enter operator sign: ");
            newOpSign = scanner2.nextLine();

            File addedClass= new File("E:\\workspace\\940420\\bin");

            URI uri = addedClass.toURI();
            URL[] urls = new URL[]{uri.toURL()};

            ClassLoader classLoader = new URLClassLoader(urls);

            Class clazz = classLoader.loadClass("second.MathOperationsUpdateImpl");   \\I don't know the class name might be added

            newOp = clazz.newInstance();    
            m = newOp.getClass().getMethod("mathOperate", String.class); \\I don't know the method name in added class

        }



        ArrayList<String> answer = new ArrayList<String>();

        for (int i = 0; i < fr.readFile(AbsolutePath).size(); i++) {
            if((fr.readFile(AbsolutePath).get(i)).contains(newOpSign)){

                answer.add(i,  String.valueOf(m.invoke(newOp,(fr.readFile(AbsolutePath).get(i)))));
            }
            else{
                answer.add(i, String.valueOf(mathOperations.mathOperate(fr.readFile(AbsolutePath).get(i))));
            }
        }

        for (int i = 0; i < fr.readFile(AbsolutePath).size(); i++) {
            writer.write(answer.get(i)+ "\r\n");
        }

        writer.close();

        System.out.print("Your File Successfully Created In: " + SecondFilePath);

    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
}   
}
马蒂亚斯·萨克斯(Matthias J.Sax)

总结的评论给出最终答案:

1:如果您不知道类名,则可以使用File获取目录的内容:

File d = new File("<knowDirectory>");
File[] f = d.listFiles();

当然,.class目录中应该只有一个文件。

2 ::这样您就知道类文件的名称和路径。加载它

Class c = Class.forName("<classname>").

比起您还可以通过反射获得所有可用的方法:

Methods[] m = c.getMethods();

3(A)::如果您不知道要调用的方法的名称,但是知道其签名(即返回类型和参数),则可以使用m.getReturnType()m.getParameterTypes()查找具有指定签名的方法。如果有多个,则无法区分它们。如果只有一个带有签名的方法,请使用它(通过反射调用)。这样的东西(对于返回类型Double和单个参数String):

Class<?>[] params = m.getParameterTypes();
Class<?> r = m.getReturnType();
if(r.getName().equals(Double.class.getName())
   && params.length == 1
   && params[0].getName().equals(String.class.getName()))
{
   // invoke
}

3(B)::如果您强迫用户实现抽象类(或接口),那么您知道要实现的方法的名称,请加载该类并将其强制转换为接口:

Class childClass = Class.forName("DerivedClassName");
MyAbstractClass userOperator = (MyAbstractClass)childClass.newInstance();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP-事先不知道文件夹名称的情况下读取它们

来自分类Dev

在不知道类型的情况下从文件中读取

来自分类Dev

如何在不知道名称的情况下访问.mat文件中的“值”?

来自分类Dev

在不知道其名称的情况下,逐行读取bash中的txt文件

来自分类Dev

在不知道其名称的情况下,逐行读取bash中的txt文件

来自分类Dev

如何在不知道我在 Python 中查找的对象名称的情况下解析 JSON 文件?

来自分类Dev

如何在不知道文件名的情况下指定下载文件夹?

来自分类Dev

在Objectify中,如何在不知道父键的情况下通过ID加载实体?

来自分类Dev

在不知道完整路径的情况下找到带有CMD的目录/文件夹

来自分类Dev

Swift 3:在不知道 indexPath 的情况下从数组中删除特定字符串?

来自分类Dev

在不知道 JSON 结构的情况下解析 Java 中的嵌套 JSON

来自分类Dev

在不知道名称的情况下声明变量

来自分类Dev

在不知道网卡名称的情况下配置网卡

来自分类Dev

jQuery-在不知道名称的情况下按父类选择元素

来自分类Dev

在不知道名称的情况下扫描特定值的嵌套 json 响应

来自分类Dev

在不知道类名的情况下创建函数

来自分类Dev

在不知道类的情况下查询本体

来自分类Dev

您如何在不知道其名称的情况下调用实现特定接口的类?

来自分类Dev

ssis在不知道现有名称的情况下重命名文件

来自分类Dev

如何在不知道元素名称的情况下获取xslt中节点的namespace-uri?

来自分类Dev

如何在不知道Perl中目录名称的情况下读取目录和子目录?

来自分类Dev

如何在不知道其名称(且不在数组中)的情况下访问JSON对象

来自分类Dev

是否可以在不知道属性名称的情况下选择SQL中的所有XML属性?

来自分类Dev

如何在不知道VB.NET中数字键名称的情况下从JSON获取值

来自分类Dev

如何在不知道名称的情况下获取JSONObject中的第一个对象?

来自分类Dev

在不知道参数名称的情况下,定义在typescript中作为参数传递的对象的参数类型

来自分类Dev

如何在不知道已保存数据的变量名的情况下使用Octave中的加载功能?

来自分类Dev

Python 和 Pandas - 在不知道文件名的情况下读取目录中唯一的 CSV 文件

来自分类Dev

如何在不知道其长度的情况下从文件中读取2D数组?

Related 相关文章

  1. 1

    PHP-事先不知道文件夹名称的情况下读取它们

  2. 2

    在不知道类型的情况下从文件中读取

  3. 3

    如何在不知道名称的情况下访问.mat文件中的“值”?

  4. 4

    在不知道其名称的情况下,逐行读取bash中的txt文件

  5. 5

    在不知道其名称的情况下,逐行读取bash中的txt文件

  6. 6

    如何在不知道我在 Python 中查找的对象名称的情况下解析 JSON 文件?

  7. 7

    如何在不知道文件名的情况下指定下载文件夹?

  8. 8

    在Objectify中,如何在不知道父键的情况下通过ID加载实体?

  9. 9

    在不知道完整路径的情况下找到带有CMD的目录/文件夹

  10. 10

    Swift 3:在不知道 indexPath 的情况下从数组中删除特定字符串?

  11. 11

    在不知道 JSON 结构的情况下解析 Java 中的嵌套 JSON

  12. 12

    在不知道名称的情况下声明变量

  13. 13

    在不知道网卡名称的情况下配置网卡

  14. 14

    jQuery-在不知道名称的情况下按父类选择元素

  15. 15

    在不知道名称的情况下扫描特定值的嵌套 json 响应

  16. 16

    在不知道类名的情况下创建函数

  17. 17

    在不知道类的情况下查询本体

  18. 18

    您如何在不知道其名称的情况下调用实现特定接口的类?

  19. 19

    ssis在不知道现有名称的情况下重命名文件

  20. 20

    如何在不知道元素名称的情况下获取xslt中节点的namespace-uri?

  21. 21

    如何在不知道Perl中目录名称的情况下读取目录和子目录?

  22. 22

    如何在不知道其名称(且不在数组中)的情况下访问JSON对象

  23. 23

    是否可以在不知道属性名称的情况下选择SQL中的所有XML属性?

  24. 24

    如何在不知道VB.NET中数字键名称的情况下从JSON获取值

  25. 25

    如何在不知道名称的情况下获取JSONObject中的第一个对象?

  26. 26

    在不知道参数名称的情况下,定义在typescript中作为参数传递的对象的参数类型

  27. 27

    如何在不知道已保存数据的变量名的情况下使用Octave中的加载功能?

  28. 28

    Python 和 Pandas - 在不知道文件名的情况下读取目录中唯一的 CSV 文件

  29. 29

    如何在不知道其长度的情况下从文件中读取2D数组?

热门标签

归档