Java, lire le contenu d'un fichier et le mettre comme une classe
Fermé
Damitoliko
-
10 févr. 2021 à 23:25
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 févr. 2021 à 14:44
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 févr. 2021 à 14:44
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 fichier epub - Guide
- Fichier rar - Guide
- Lire fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
11 févr. 2021 à 14:44
11 févr. 2021 à 14:44
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