nio

Mattepuffo's logo
Monitorare il file system con Java

Monitorare il file system con Java

Finalmente vacanza, e finalmente posso dedicarmi di più al blog e alla programmazione per conto mio!

Oggi vediamo come monitorare il file system usando Java e il packaje NIO (incluso nel JDK ovviamente).

Qui potete leggere le differenze rispetto al più classico IO.

Partiamo dal main:

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchService;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;

public class Main {

    public static void main(String[] args) throws IOException, InterruptedException {
        Path folder = Paths.get("/path/to/dir");
        if (folder == null) {
            throw new UnsupportedOperationException("Directory not found");
        }
        WatchService ws = folder.getFileSystem().newWatchService();
        Watcher w = new Watcher(ws);
        Thread th = new Thread(w, "Watcher");
        th.start();
        folder.register(ws, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
        th.join();
    }

}

Come vedete usiamo praticamente solo classi e oggetti di NIO.

Mattepuffo's logo
Intercettare tasto invio in C++

Intercettare tasto invio in C++

Ho un programma in C++ che si avvia e rimane attivo in attesa di connessioni con un ciclo infinito.

Voglio poterlo terminare usando il semplice tasto ENTER / INVIO.

Vediamo come fare sia in Visual C++ (quindi una versione per Windows), sia in C++ usando Ncurses (che gira quindi su Linux).

Visto che la versione VC++ è più semplice partiamo da qua.

Per controllare la pressione dei tasti su Windows dobbiamo usare la libreria conio.h.

Quindi includiamola e poi nel main:

#include // TUTTO QUELLO CHE VI SERVE
................
#include <conio.h>

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
       // LANCIO PROGRAMMA CON CICLO INFINITO
       if(_getch() == 13)
       {
           // ESCO DAL PROGRAMMA
       }
      return 0;
}

La funzione _getch() controlla il carattere premuto; nella tabella ASCII il 13 corrisponde ad ENTER.

Se viene premuto esco dal programma.

Per Linux invece dobbiamo agire in maniera diversa in quanto conio.h è una libreria specifica Microsoft.

Ci sono vari porting per Linux, ma da quanto ho capito si basano anche su Ncurses.

Quindi io ho usato direttamente questa libreria.

Per programmare con questa libreria bisogna prima installare i pacchetti devel; su Opensuse:

# zypper install ncurses-devel

Questo pacchetto non è richieso per l'esecuzione, ma è comunque richiesto ncurses.