You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文本文件中的Java代码行嵌入到Java程序中并执行

当然可以实现,以下是两种实用方案

方案1:用Java脚本引擎快速执行代码片段

Java自带脚本引擎,能直接解析执行Java代码字符串,适合处理像System.out.println(13);这种简单语句。直接修改你的代码即可:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.File;
import java.util.Scanner;

public class RunCodeFromTxt {
    public static void main(String[] args) {
        File sampleCode = new File("sample.txt");
        // 获取支持Java代码的脚本引擎
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");

        try (Scanner scan = new Scanner(sampleCode)) {
            while (scan.hasNextLine()) {
                String codeLine = scan.nextLine();
                // 直接执行每行代码
                engine.eval(codeLine);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后,文本里的System.out.println(13);就会被执行,输出13而不是打印代码本身。

方案2:动态编译类(适合复杂代码场景)

如果文本里的代码更多、逻辑更复杂,你可以把这些代码包装成完整的Java类,用Java Compiler API动态编译成字节码,再加载执行。比如:
假设你的sample.txt里有多行代码:

System.out.println(13);
System.out.println("动态执行的代码");

可以用下面的代码实现:

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Scanner;

public class DynamicCodeRunner {
    public static void main(String[] args) {
        File sampleCode = new File("sample.txt");
        StringBuilder classCode = new StringBuilder();
        // 把文本代码包装成合法的Java类
        classCode.append("public class TempDynamicCode {\n");
        classCode.append("    public static void execute() {\n");

        try (Scanner scan = new Scanner(sampleCode)) {
            while (scan.hasNextLine()) {
                // 缩进代码,保证类结构合法
                classCode.append("        ").append(scan.nextLine()).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }

        classCode.append("    }\n");
        classCode.append("}\n");

        try {
            // 写入临时Java文件
            File tempJavaFile = new File("TempDynamicCode.java");
            FileWriter writer = new FileWriter(tempJavaFile);
            writer.write(classCode.toString());
            writer.close();

            // 编译临时类
            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            compiler.run(null, null, null, tempJavaFile.getAbsolutePath());

            // 加载编译后的类并执行方法
            URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{new File(".").toURI().toURL()});
            Class<?> dynamicClass = classLoader.loadClass("TempDynamicCode");
            Method executeMethod = dynamicClass.getMethod("execute");
            executeMethod.invoke(null);

            // 清理临时文件(可选)
            tempJavaFile.delete();
            new File("TempDynamicCode.class").delete();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个方法更灵活,哪怕文本里是多行业务代码,只要能组成合法的Java方法内容,就能被执行。

内容的提问来源于stack exchange,提问作者walbag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:11:50