Java, lire le contenu d'un fichier et le mettre comme une classe
Damitoliko
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je travail sur un projet en java et je voudrai savoir si c'est possible de lire le contenu d'un fichier héberger sur web et définir son contenu comme étant une classe, la compiler et l'exécuter.
Merci d'avance
Je travail sur un projet en java et je voudrai savoir si c'est possible de lire le contenu d'un fichier héberger sur web et définir son contenu comme étant une classe, la compiler et l'exécuter.
Merci d'avance
A voir également:
- Java, lire le contenu d'un fichier et le mettre comme une classe
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
1 réponse
Bonjour,
Théoriquement, c'est possible. Mais en pratique il y a beaucoup de limitations au code que tu pourras réellement manipulé de cette manière.
Pour l'exemple j'utilise le code HelloWorldApp qui est hébergé ici : https://docs.oracle.com/javase/tutorial/getStarted/application/examples/HelloWorldApp.java
Le résultat est un "Hello World!" qui s'affiche correctement.
Théoriquement, c'est possible. Mais en pratique il y a beaucoup de limitations au code que tu pourras réellement manipulé de cette manière.
Pour l'exemple j'utilise le code HelloWorldApp qui est hébergé ici : https://docs.oracle.com/javase/tutorial/getStarted/application/examples/HelloWorldApp.java
import java.lang.reflect.Method; import java.net.*; import java.net.http.*; import java.net.http.HttpResponse.BodyHandlers; import java.nio.file.*; import javax.tools.*; public class Application { public static void main(String[] args) throws Exception { String codeUrl = "https://docs.oracle.com/javase/tutorial/getStarted/application/examples/HelloWorldApp.java"; String className = "HelloWorldApp"; System.out.println("# Création d'un répertoire temporaire"); Path dir = Files.createTempDirectory("javac-").toAbsolutePath(); System.out.println(dir); System.out.println("# Téléchargement du code : " + codeUrl); HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder(new URI(codeUrl)).build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString()); System.out.println("# Résultat du téléchargement : " + response.statusCode()); String code = response.body(); System.out.println(code); System.out.println("# Enregistrement du code " + className ); Path javaFile = Files.writeString(Paths.get(dir.toString(), className + ".java"), code).toAbsolutePath(); System.out.println("# Compilation du code " + className); JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); int n = javac.run(null, null, null, javaFile.toString()); System.out.println("# Résultat de la compilation : " + n); System.out.println("# Chargement de la classe " + className); URLClassLoader classLoader = new URLClassLoader(new URL[] { dir.toUri().toURL() }); Class<?> mainClass = classLoader.loadClass(className); System.out.println("# Récupération de la méthode main"); Method method = mainClass.getMethod("main", String[].class); method.setAccessible(true); System.out.println("# Exécution de la méthode main"); method.invoke(null, (Object) null); System.out.println("# Fin du programme"); classLoader.close(); } }
Le résultat est un "Hello World!" qui s'affiche correctement.
# Création d'un répertoire temporaire C:\Users\KX\AppData\Local\Temp\javac-12345678987654321 # Téléchargement du code : https://docs.oracle.com/javase/tutorial/getStarted/application/examples/HelloWorldApp.java # Résultat du téléchargement : 200 class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. } } # Enregistrement du code HelloWorldApp # Compilation du code HelloWorldApp # Résultat de la compilation : 0 # Chargement de la classe HelloWorldApp # Récupération de la méthode main # Exécution de la méthode main Hello World! # Fin du programme