Eseguire comandi con Java e NuProcess
La libreria NuProcess ci permette di eseguire comandi e processi in Java sostituedo le classi standard.
E' multipiattaforma, ma io l'ho testata solo su Linux.
Se usate Maven aggiungete questa dipendenza:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>nuprocess</artifactId>
<version>2.0.4</version>
<scope>compile</scope>
</dependency>
Dopo di create una classe che estende NuAbstractProcessHandler:
import com.zaxxer.nuprocess.NuAbstractProcessHandler;
import com.zaxxer.nuprocess.NuProcess;
import java.nio.ByteBuffer;
public class MyProcess extends NuAbstractProcessHandler {
private NuProcess nuProcess;
@Override
public void onStart(NuProcess nuProcess) {
this.nuProcess = nuProcess;
}
@Override
public boolean onStdinReady(ByteBuffer buffer) {
buffer.put("Nel caso non ci siano dati, stampo questo!".getBytes());
buffer.flip();
return false;
}
@Override
public void onStdout(ByteBuffer buffer, boolean closed) {
if (!closed) {
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
System.out.println(new String(bytes));
nuProcess.closeStdin(true);
}
}
}
Richiamiamo tutto così:
import com.zaxxer.nuprocess.NuProcess;
import com.zaxxer.nuprocess.NuProcessBuilder;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
try {
NuProcessBuilder pb = new NuProcessBuilder(List.of("ls", "-la"));
MyProcess handler = new MyProcess();
pb.setProcessListener(handler);
NuProcess process = pb.start();
process.wantWrite();
process.waitFor(0, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
In questo caso abbiamo richiamato ls, indicando qualche opazione come altro elemento della lista.
Inoltre come parametro del waitFor abbiamo mezzo 0, che significa infinito.
Enjoy!
java maven nuprocess nuabstractprocesshandler
Commentami!