Ciao a tutti, da una vecchia discussione trovata mi è venuta voglia di provare ad eseguire comandi di sistema tramite java, per farlo sto usando le classi ProcessBuilder e Process.
Ho trovato esempi di codice in cui si prova a compilare ed eseguire una classe esterna con ProcessBuilder, sistemando qua e là sono arrivato a questo:
A me sembra funzionare, è un buon modo di procedere o si potrebbe far di meglio (che non sia troppo complicatocodice:import java.lang.ProcessBuilder; import java.io.*; public class Pb { public static void main(String [] args) throws IOException { String mainClass="Prova",directory="G:/sparsiJava"; ProcessBuilder cmd = new ProcessBuilder(new String[]{"cmd","/c","javac "+mainClass+".java"}); cmd.directory(new File(directory)); cmd.redirectErrorStream(true); try { Process process=cmd.start(); InputStream is=process.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader br=new BufferedReader(isr); String line,errori=""; while((line=br.readLine())!=null)errori+=line+"\n"; if(process.waitFor()==0) { process.destroy(); cmd=new ProcessBuilder(new String[]{"cmd","/c","java "+mainClass}); cmd.directory(new File(directory)); process=cmd.start(); process.waitFor(); process.destroy(); } else { System.out.print("\nErrori in compilazione:\n\n"+errori); } } catch(InterruptedException ex){} } }) ?
Infine, un punto che non riesco a risolvere: supponiamo che la classe Prova richieda l'inserimento di variabili, che io leggevo prima con Scanner, è possibile passare le variabili quando richieste con ProcessBuilder, ma non al momento di far partire il processo ?
Se ad esempio ho una classe Prova così costruita (Tanto per fare un esempio banale):
Posso gestire il flusso del programma tramite il ProcessBuilder ?codice:import java.util.Scanner; public class Prova { public static void main(String[] args) { String scelta=""; while(scelta!=null) { System.out.print("\n\nChe operazione vuoi effettuare (1: somma 2: differenza) ? > "); Scanner scan=new Scanner(System.in); scelta=scan.nextLine(); if(!scelta.equals("1")&&!scelta.equals("2"))return; System.out.print("\nInserisci il primo intero > "); int u=scan.nextInt(); System.out.print("\nInserisci il secondo intero > "); int d=scan.nextInt(); if(scelta.equals("1"))System.out.print("\nLa somma dei due interi e': "+(u+d)); else System.out.print("\nLa differenza dei due interi e': "+(u-d)); } } }

) ?
Rispondi quotando
