Exécuter des instructions non-Java à partir de Java

Classes et méthodes à utiliser

java.lang.Runtime#exec

Le traitement du résultat est effectué à l'aide du fichier java.lang.Process renvoyé.

Exemple de code

Process proc = Runtime.getRuntime().exec( "java --version" );

Exemple d'exécution

jshell> Process proc = Runtime.getRuntime().exec( "java --version" );
proc ==> Process[pid=19916, exitValue="not exited"]

jshell> proc.exitValue();
$2 ==> 0

Entrée sortie

Notez que le nom de la méthode est le point de vue du côté qui a exécuté Process # exec **.

Sortie du processus d'exécution

import java.io.*;

Process proc = Runtime.getRuntime().exec( "java Hello" );
String line = null;

try ( var buf = new BufferedReader( new InputStreamReader( proc.getInputStream() ) ) ) {
  while( ( line = buf.readLine() ) != null ) System.out.println( line );
}

# Hello.Contenu de java
public class Hello {
    public static void main( String[] args ) {
        System.out.println( "Hello, world!!" );
    }
}


Résultat

Hello, world!!
* On suppose que NotExist.java n'existe pas.

import java.io.*;

Process proc = Runtime.getRuntime().exec( "javac NotExist.java" );
String line = null;

try ( var buf = new BufferedReader( new InputStreamReader( proc.getErrorStream() ) ) ) {
  while( ( line = buf.readLine() ) != null ) System.out.println( line );
}


Résultat

Erreur:Fichier non trouvé: NotExist.java
comment utiliser: javac <options> <source files>
Pour une liste des options disponibles--Utilisez l'aide

Contribution au processus d'exécution

  • Process#getOutputStream
    → Obtenez OutputStream pour transmettre des informations à l'entrée standard du processus exécuté par Process # exec

import java.io.*;

Process proc = Runtime.getRuntime().exec( "java -cp . SampleCode" );

try ( var buf = new BufferedWriter( new OutputStreamWriter( proc.getOutputStream() ) ) ) {
     buf.write( "3" );
     buf.newLine();
     buf.write( "5" );
     buf.newLine();
}

//Afficher le contenu de sortie du processus acquis
try ( var buf = new BufferedReader( new InputStreamReader( proc.getInputStream() ) ) ) {
   while( ( line = buf.readLine() ) != null ) System.out.println( line );
}

// SampleCode.Contenu de java
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SampleCode {
	public static void main( String[] args ) throws Exception{
		try ( var buf = new BufferedReader(
				new InputStreamReader( System.in )
				) ) {
			int x = Integer.parseInt( buf.readLine() );
			int y = Integer.parseInt( buf.readLine() );

			System.out.println( x + "*" + y + "=" + x*y );
		}
	}
}


Résultat

3*5=15

Autre

--Execute Process # waitFor pour attendre que le processus se termine.

  • Le code de fin du processus peut être obtenu avec Process # exitValue.
    Cependant, si vous appelez exitValue lorsque le processus n'est pas terminé, une exception (java.lang.IllegalThreadStateException) se produit. (Voir ci-dessous)
Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
  at java.base/java.lang.ProcessImpl.exitValue(ProcessImpl.java:478)

Recommended Posts

Exécuter des instructions non-Java à partir de Java
Exécutez du code Java à partir de cpp sur cocos2dx
Appeler Java depuis JRuby
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Évaluer la source Java à partir de Java
Accédez à API.AI depuis Java
De Java à Ruby !!
Migration de Cobol vers JAVA
Java à partir du débutant, remplacer
Création d'index Elastic Search à partir de Java
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
Java à partir de débutant, héritage
La vie Java à partir de zéro
Utilisation de Docker depuis Java Gradle
De Java inefficace à Java efficace
JavaScript vu de Java
Appeler la classe scellée de Kotlin depuis Java
Java, classe abstraite pour commencer par débutant
Coder Java depuis Emacs avec Eclim
Obtenir le pays à partir de l'adresse IP (Java)
Exécuter le fichier de commandes à partir de Java
[Java] Supprimer les espaces dans les chaînes de caractères
Procédure de préparation pratique d'Akka à partir de Java
Accéder à Teradata depuis une application Java
Utiliser Chrome Headless de Selenium / Java
Exécuter du code Java packagé avec des commandes
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste
Java, constructeur de surcharge à partir du débutant
Java, interface pour partir du débutant
[Oracle] Exécuter le lot Windows à partir du déclencheur
La route de JavaScript à Java
Réintroduction de Java8, disponible depuis Android Studio 2.4
Appelez l'API Java de TensorFlow depuis Scala
[Java] Conversion d'un tableau à une liste
Exemple de code utilisant Minio de Java