JAVA 中的 python "Execfile" 的替代方案?
Alternative to the python "Execfile" in JAVA?
我想知道是否有与 execfile(从 Python )到 java 相同的命令?
我不确定我是否理解你想要实现的目标,但这里有几个选项。
如果你想在Java中执行Python个文件,按照评论中的建议,你可以使用PythonInterpreter
class,非常好用。下面是从网络上截取的一个简单例子:
import org.python.util.PythonInterpreter;
...
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:/path/to/file/__main__.py");
但是,如果您正在寻找类似但适用于 Java 文件的东西,恐怕就没那么容易了。
首先,Java是一个两阶段语言:
- Classes(在 .java 文件中实现)由编译器(即
javac
命令)编译,并且翻译成字节码(.class 文件)
- 字节码由JVM执行(即
java
命令),实际上是一个Interpreter.
此外,您实际上不能在字节码上应用 Python execFile
函数,这也是因为 classes 不是脚本,而是您可以在其中实例化和使用的对象的表示你的程序。
作为最后一个选项,如果您正在寻找一种操作字节码的方法,例如通过动态加载和分析 classes,您可以使用几个库来实现这一目的。例如 JavaAssist 就是其中之一。
这是一个如何加载 Class:
的简单示例
// directory: path which class files were written
// className: fully qualified name of the class you want to load.
File f = new File(directory);
java.net.URL[] urls = new java.net.URL[] { f.toURI().toURL() };
ClassLoader cl = new URLClassLoader(urls, loader);
Class cls = cl.loadClass(className);
一旦获得 Class
对象的实例,就可以对它们做很多事情:获取名称、类型、superclasses、方法、成员等信息
我想知道是否有与 execfile(从 Python )到 java 相同的命令?
我不确定我是否理解你想要实现的目标,但这里有几个选项。
如果你想在Java中执行Python个文件,按照评论中的建议,你可以使用PythonInterpreter
class,非常好用。下面是从网络上截取的一个简单例子:
import org.python.util.PythonInterpreter;
...
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:/path/to/file/__main__.py");
但是,如果您正在寻找类似但适用于 Java 文件的东西,恐怕就没那么容易了。
首先,Java是一个两阶段语言:
- Classes(在 .java 文件中实现)由编译器(即
javac
命令)编译,并且翻译成字节码(.class 文件) - 字节码由JVM执行(即
java
命令),实际上是一个Interpreter.
此外,您实际上不能在字节码上应用 Python execFile
函数,这也是因为 classes 不是脚本,而是您可以在其中实例化和使用的对象的表示你的程序。
作为最后一个选项,如果您正在寻找一种操作字节码的方法,例如通过动态加载和分析 classes,您可以使用几个库来实现这一目的。例如 JavaAssist 就是其中之一。
这是一个如何加载 Class:
// directory: path which class files were written
// className: fully qualified name of the class you want to load.
File f = new File(directory);
java.net.URL[] urls = new java.net.URL[] { f.toURI().toURL() };
ClassLoader cl = new URLClassLoader(urls, loader);
Class cls = cl.loadClass(className);
一旦获得 Class
对象的实例,就可以对它们做很多事情:获取名称、类型、superclasses、方法、成员等信息