Вопрос Как можно запустить строчку java кода которая хранится в txt файле?

Регистрация
23 Май 2013
Сообщения
73
Репутация
0
Спасибо
0
Монет
0
Всем привет, я бы хотел узнать каким образом можно запустить строчку кода в определенном методе которая хранится в текстовом файле.

Я использовал многопоточность и перебирал переменные, результата не получил.
 
Крайне сложно, почти невозможно. Это не скриптовый язык, "запустить строчку" запросто не получится. А нафига оно надо-то?
 
Чтобы запустить код Java, который хранится в текстовом файле, вы можете использовать класс ScriptEngine из пакета javax.script. Этот класс позволяет выполнять код, написанный на различных языках сценариев, включая JavaScript. Вот пример кода, который показывает, как это можно сделать: import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.nio.file.Files;
import java.nio.file.Paths;

public class RunCodeFromFile {
public static void main(String[] args) throws Exception {
// Создаем ScriptEngineManager
ScriptEngineManager manager = new ScriptEngineManager();
// Получаем ScriptEngine для JavaScript
ScriptEngine engine = manager.getEngineByName("JavaScript");
// Читаем содержимое файла с кодом
String code = new String(Files.readAllBytes(Paths.get("code.txt")));
// Выполняем код
engine.eval(code);
}
}
В этом примере мы создаем экземпляр ScriptEngineManager, затем получаем ScriptEngine для JavaScript и читаем содержимое файла с кодом. Затем мы выполняем код с помощью метода eval у ScriptEngine. Обратите внимание, что этот пример использует JavaScript, а не Java. Если вы хотите запустить код Java, вам нужно использовать другой способ, например, компилировать и загружать классы во время выполнения.

Чтобы скомпилировать и загрузить классы во время выполнения, можно использовать следующие шаги:

1. Скомпилировать исходники в Bytecode (файлы .class).
2. Загрузить скомпилированные классы в ClassLoader.
3. Использовать reflection api для получения методов и выполнения их.

Вы можете использовать URLClassLoader для загрузки скомпилированных классов. Этот класс позволяет загружать классы из определенного каталога или архива. Однако, чтобы использовать этот метод, вам необходимо знать имя класса или структуру пакета.
 
вы уверены что категорией не ошиблись?
 
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class DynamicCodeExecution {
public static void main(String[] args) {
// Путь к файлу с кодом
String filePath = "path/to/your/code.txt";

try {
// Прочитать код из файла
String code = readCodeFromFile(filePath);

// Компиляция кода
compileAndExecuteCode(code);
} catch (IOException e) {
e.printStackTrace();
}
}

private static String readCodeFromFile(String filePath) throws IOException {
return Files.readString(Path.of(filePath));
}

private static void compileAndExecuteCode(String code) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

// Генерация временного файла для хранения кода
String className = "DynamicCode";
String fileName = className + ".java";
File sourceFile = new File(fileName);

try {
// Запись кода во временный файл
Files.write(sourceFile.toPath(), code.getBytes());

// Компиляция файла
int compilationResult = compiler.run(null, null, null, fileName);

if (compilationResult == 0) {
// Загрузка и выполнение класса с помощью отражения
Class clazz = Class.forName(className);
Object instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("yourMethodName").invoke(instance);
} else {
System.out.println("Compilation failed.");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Удаление временного файла
sourceFile.delete();
}
}
}
 
Назад
Сверху