代码之家  ›  专栏  ›  技术社区  ›  Coder

在Java中从字符串执行代码

  •  3
  • Coder  · 技术社区  · 7 年前

    我做了一些搜索,似乎有一些人问了类似的问题,但没有一个是我想要的(一些人建议一些脚本编写的东西,但我没有足够的知识,我在做什么,所以我想使用java只有在可能的情况下)。

    我需要能够从字符串中读取代码行,然后用Java执行它们(如下所示):

    String code = "System.out.println(\"Test code\");";
    

    System.out.println("Test code");
    

    但我想从字符串中执行println方法以外的代码。

    是否可以单独使用java执行代码,如果可以,它将如何编译??

    3 回复  |  直到 7 年前
        1
  •  4
  •   slim    7 年前

    你不能像我想象的那样轻易做到。你所描述的是你可能在

    如果你有 tools.jar 在类路径中,可以从Java程序中编译Java代码:

    com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
    String[] options = new String[] {
        "-classpath", classpath, "-d", outputDir, filename
    };
    javac.compile(options);
    

    从那里你可以与类加载器搏斗,加载你编译的类,然后运行它。

    然而,这不是一种简单或主流的使用Java的方法,通常人们不会这样做,因为这既不是良好的实践,也不是必要的。编译后不能运行用户提供的代码是一种安全特性。


    如果您想在Java生态系统中使用更具动态性的语言,可以看看Groovy。


    Java Scripting API .

        2
  •  1
  •   Chamalo90    7 年前

    因此,您需要将字符串放入另一个java文件的主函数中,然后编译并最终运行它。

    您可能需要: http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

        3
  •  1
  •   Herr Derb    7 年前

    如果我理解正确的话,您希望在java控制台中输入一个字符串。然后,应在外部程序中神奇地键入该给定字符串。如果我没有理解正确,我会再次删除该答案。

    public class Test {
    
        public static void main(String[] args) throws IOException, ClassNotFoundException, Exception {
        Robot robot = new Robot();
        String text = "Hello";
        File file = File.createTempFile("tmp", ".txt");
    
        if (Desktop.isDesktopSupported()) {
            Desktop.getDesktop().edit(file);
            Thread.sleep(1000);
        } else {
            // dunno, up to you to handle this
        }
        for (char c : text.toCharArray()) {
            int keyEvent = KeyEvent.getExtendedKeyCodeForChar(c);
            robot.keyPress(keyEvent);
            Thread.sleep(500);
        }
        }
    }
    

    你好 正在被键入。这就是我为你准备的。现在你需要做的是使用 Scanner