Archivio del aprile 2010

Leggere un file al contrario in C

La lettura di un file in C avviene in maniera unidirezionale, dall’inizio alla fine. Per leggere un file al contrario, è necessario utilizzare la funzione di posizionamento fseek:

int fseek ( FILE * stream, long int offset, int origin );

dove stream è un puntatore ad un oggetto FILE, offset è l’offset, in byte, da origin.
origin è un intero che rappresenta la posizione. E’ possibile utilizzare le seguenti tre costanti:

SEEK_SET Inizio del file
SEEK_END Fine del file
SEEK_CUR Posizione corrente

Il valore di ritorno della funzione è 0 se ha avuto successo, un valore non nullo altrimenti.

Continua >

Java: JList con elementi personalizzati

La libreria Swing consente al programmatore di decidere come ogni elemento (detto cella) di una JList deve essere mostrato. Per far sì che questo sia possibile, è necessario definire un renderer personalizzato e farlo settare alla JList con il metodo:

void setCellRenderer(ListCellRenderer cellRenderer)

Il renderer personalizzato verrà creato implementando l’interfaccia javax.swing.ListCellRenderer e il relativo metodo

Component getListCellRendererComponent(JList list, Object value,
    int index, boolean isSelected, boolean cellHasFocus)

Continua >

Java: la classe JToolBar

La classe javax.swing.JToolBar consente all’utente di avere sempre a disposizione una barra mediante la quale attivare funzionalità comuni.
Solitamente, vengono aggiunte delle azioni alla tool bar, rappresentate in maniera grafica, ma è anche possibile aggiungere altri componenti, come text box e label.

Di seguito, istanzieremo un oggetto JToolBar utilizzando il costruttore di default e aggiungeremo i componenti con il metodo:

public JButton add(Action a)

Essendo javax.swing.Action un’interfaccia, creeremo una classe che estenderà javax.swing.AbstractAction, una classe che implementa Action.

Continua >

Host Lookup in Java

La creazione di un utility che converte un hostname in un indirizzo IP e viceversa può essere decisamente semplice, utilizzando la classe java.net.InetAddress.
In particolare, il programma accetterà un hostname o un IP come argomento (quale dei due sia stato passato viene deciso con una funzione che sfrutta le espressioni regolari, e quindi le classi Pattern e Matcher) e lo trasformerà di conseguenza.

Continua >

Echo Server in Java

Il codice che segue implementa un semplice Echo Server in Java.
Il programma crea un ServerSocket che resta in attesa di una connessione. Quando riceve una connessione in ingresso, legge i dati in ingresso fino al loro termine o fino a quando non viene incontrato il carattere di newline, ed effettua l’echo.
Il server si limita a ricevere, rispondere e chiudere la connessione, senza rimanere in attesa di ulteriori input.

Continua >

Rappresentazione di un indirizzo IP in Java

In Java, un indirizzo IP (sia IPv4 che IPv6) è rappresentato come un oggetto di classe java.net.InetAddress che, solitamente, contiene sia l’hostname che l’indirizzo IP.

La classe InetAddress non ha costruttori pubblici quindi la creazione di un’istanza di tale classe è affidata a diversi metodi statici:

// determina l'IP dell'indirizzo dell'host specificato
static InetAddress getByName(String host)
    throws UnknownHostException

// determina tutti gli IP dell'indirizzo dell'host specificato
static InetAddress[] getAllByName(String host)
    throws UnknownHostException

// ricava un InetAddress dall'indirizzo IP specificato
static InetAddress getByAddress(byte[] addr)
    throws UnknownHostException

// ricava un InetAddress dal nome dell'host e dall'IP specificato
static InetAddress getByAddress(String host, byte[] addr)
    throws UnknownHostException

// ritorna l'host locale
static InetAddress getLocalHost()
    throws UnknownHostException

Continua >

Visualizzare il sorgente di una pagina web in Java

La classe java.net.URL definisce il metodo

public final InputStream openStream()
    throws IOException

che consente di collegarsi alla risorsa indicata dall’oggetto URL, ritornando un java.io.InputStream da cui è possibile leggere i dati.
Tra i dati letti, non compare alcun dato riguardante le informazioni sul protocollo (come ad esempio gli header del protocollo HTTP).

Continua >

Gestire gli URL in Java

In Java, un URL (Uniform Resource Locator) è gestito utilizzando la classe java.net.URL.
Il vantaggio di utilizzare una classe specializzata rispetto ad una semplice stringa è che, in realtà, un URL è composto da più componenti, come ad esempio l’host, la porta, la stringa di query ecc.
Tale classe permette di accedere a questi componenti utilizzando gli appositi metodi getter

Continua >

Java: la classe ServerSocket

La classe ServerSocket, contenuta nel package java.net, è utilizzata per fornire le funzionalità che consentono di creare un server in Java.

I costruttori di questa classe sono:

// crea un socket senza effettuare la bind
ServerSocket()
// crea un socket ed effettua la bind sulla porta specificata
ServerSocket(int port)
// crea un socket, effettua la bind sulla porta specificata
// e setta il backlog
ServerSocket(int port, int backlog)
// crea un socket, effettua la bind sulla porta e sull'indirizzo
// specificato, e setta il backlog
ServerSocket(int port, int backlog, InetAddress bindAddr)

Tutti i costruttori lanciano una IOException se avviene un errore in fase di creazione del socket.

Continua >

Java: la classe Console

La classe Console, contenuta nel package java.io e presente da Java 1.6, definisce i metodi per accedere alla console associata alla JVM, se ce n’è una.
Essa può essere ottenuta mediante il metodo

public static Console console()

della classe System. Nel caso in cui non vi sia una console associata, verrà ritornato null.

Continua >