Führen Sie Nicht-Java-Anweisungen von Java aus

Zu verwendende Klassen und Methoden

java.lang.Runtime#exec

Die Behandlung des Ergebnisses erfolgt mit dem zurückgegebenen java.lang.Process.

Codebeispiel

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

Ausführungsbeispiel

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

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

Input-Output

Beachten Sie, dass der Methodenname der Standpunkt von der Seite ist, auf der Process # exec ** ausgeführt wurde.

Ausgabe aus dem Ausführungsprozess

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.Inhalt von Java
public class Hello {
    public static void main( String[] args ) {
        System.out.println( "Hello, world!!" );
    }
}


Ergebnis

Hello, world!!
* Es wird davon ausgegangen, dass NotExist.java nicht vorhanden ist.

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 );
}


Ergebnis

Error:Datei nicht gefunden: NotExist.java
wie benutzt man: javac <options> <source files>
Für eine Liste der verfügbaren Optionen--Verwenden Sie die Hilfe

Eingabe in den Ausführungsprozess

  • Process#getOutputStream
    → Lassen Sie OutputStream Informationen an die Standardeingabe des von Process # exec
    ausgeführten Prozesses übergeben

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();
}

//Zeigen Sie den Ausgabeinhalt des erfassten Prozesses an
try ( var buf = new BufferedReader( new InputStreamReader( proc.getInputStream() ) ) ) {
   while( ( line = buf.readLine() ) != null ) System.out.println( line );
}

// SampleCode.Inhalt von 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 );
		}
	}
}


Ergebnis

3*5=15

Andere

  • Prozess ausführen # waitFür warten, bis der Prozess abgeschlossen ist.
  • Der Endcode des Prozesses kann mit Process # exitValue abgerufen werden.
    Wenn Sie jedoch exitValue aufrufen, während der Prozess nicht beendet wird, tritt eine Ausnahme (java.lang.IllegalThreadStateException) auf. (Siehe unten)
Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
  at java.base/java.lang.ProcessImpl.exitValue(ProcessImpl.java:478)

Recommended Posts

Führen Sie Nicht-Java-Anweisungen von Java aus
Führen Sie Java-Code von cpp auf cocos2dx aus
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Eval Java-Quelle von Java
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
Migration von Cobol nach JAVA
Java ab Anfänger überschreiben
Elastic Search Indexerstellung aus Java
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Java ab Anfänger, Vererbung
Java-Leben von vorne anfangen
Verwenden von Docker von Java Gradle
Von ineffektivem Java zu effektivem Java
JavaScript von Java aus gesehen
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Java, abstrakte Klasse für Anfänger
Code Java von Emacs mit Eclim
Land von IP-Adresse abrufen (Java)
Führen Sie eine Batchdatei von Java aus
[Java] Entfernen Sie Leerzeichen in Zeichenfolgen
Akka praktische Vorbereitungsprozedur aus Java
Greifen Sie über eine Java-Anwendung auf Teradata zu
Verwenden Sie Chrome Headless von Selenium / Java
Führen Sie gepackten Java-Code mit Befehlen aus
Java soll ab heute dabei sein
Von Java zu VB.NET-Writing Kontrastmemo-
Java, Überlastungskonstruktor ab Anfänger
Java, Schnittstelle für Anfänger
[Oracle] Windows-Batch vom Trigger ausführen
Der Weg von JavaScript nach Java
Wiedereinführung von Java8, das seit Android Studio 2.4 verfügbar ist
Rufen Sie die Java-API von TensorFlow von Scala aus auf
[Java] Konvertierung von Array zu Liste
Beispielcode mit Minio aus Java