Eseguire comandi con Java e NuProcess

Mattepuffo's logo
Eseguire comandi con Java e NuProcess

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!


Condividi

Commentami!