В этой статье мы рассмотрим, как получать результат работы с консольных программ на языке java в программах на .NET.
Допустим у нас есть такая программа на java, скомпилированная в файл Program1.class
public class Program1 { public static void main(String[] args) { System.out.println("Hellow World!"); } }
Основная программа
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Diagnostics; namespace Sharp_Interop { class Program { static void Main(string[] args) { Process proc = new Process(); //полный путь к файлу java.exe - C:\Program Files\Java\jre6\bin\java.exe //или C:\Program Files\Java\jdk1.6.0_26\bin\java proc.StartInfo.FileName = "C:\Program Files\Java\jre6\bin\java"; //имя исполняемого класса. Файл класса должен лежать в одной папке с приложением //абсолютные пути что-то не канают proc.StartInfo.Arguments = "Program1"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.CreateNoWindow = true; string str = ""; proc.Start(); str = proc.StandardOutput.ReadToEnd(); proc.Close(); proc.Dispose(); Console.WriteLine(str); Console.ReadLine(); } } }
В данном случае мы запускаем вирутальную машину java, передавая ей сам скомпилированный class-файл на java в качестве аргумента. С помощью метода RedirectStandardOutput выходной поток java-программы перенаправляется в нашу программу на c#, где мы его считываем с помощью метода StandardOutput.ReadToEnd.