INPUT - OUTPUT



 

La classe System

Include gli standard input, output ed error stream, le propieta’ del sistema ed altre utilita’ varie (es ora, etc.)

Esempio:
System.out System.out.println("Ciao");
System.getProperty(argomento) System.getProperty("user.name")

 

 

Standard IO Stream

Standard input System.in = usato per input del programma

Standard output System.out = usato per l’output del programma

Standard error System.err = usato per visualizzare i messaggi di errore

 

 

La classe File

La classe file puó rappresentare il nome di un file o l'intera directory (es. File path = new File(".");)

Il metodo list(), fornisce tutti i file (es. list = path.list();)

L’interfaccia FilenameFilter fornisce un solo metodo accept(File dir, String name) che ritorna true se il file corrisponde ai parametri indicati in name

Altri metodi:

fileData(File) = Visualizza informazioni sul file o la directory passata come argomento

renameTo() = Rinomina o sposta un file

mkdirs() = crea una directory

Esempio1
//: TestFile.java
import java.io.*;
public class TestFile {
public static void main(String args[]) {
String[] lista;
File path;
path = new File(".");
lista = path.list();
// Stampa del contenuto dell'array lista

for(int i=0 ; i<lista.length ; i++) { 

System.out.println(lista[i]);

}

} catch(Exception e) { }

}

}

class Filtro implements FilenameFilter {

String select;

Filtro(String select) {

this.select="select;"

}

public boolean accept(File dir, String name) {

String f="new" File(name).getName(); return f.indexOf(select) !="-1";

}

}

 

Esempio2
//:ListJava.java

import java.io.*;

public class ListJava {

public static void main(String args[]) {

File path;

String java = "java";

String[] lista;

try {

path = new File(".");

lista = path.list(new Filtro(java));

for(int i=0 ; i<lista.length ; i++) {

System.out.println(lista[i]);

}

} catch(Exception e) { }

}

}

class Filtro implements FilenameFilter {

String select;

Filtro(String select) {

this.select = select;

}

public boolean accept(File dir, String name) {

String f = new File(name).getName();

return f.indexOf(select) != -1;

}

}

 


    

 

 

Input stream e Output stream

La libreria java per IO e’divisa in 2 parti , input e output, che derivano per ereditarieta’ da InputStream (che fornisce il metodo read()) e OutputStream (che fornisce il metodo write()).

Tipi di Input/Output stream

Tipo Input Output
Stream InputStreamReader OutputStreamReader
Array di byte CharArrayReader CharArrayWriter
Oggetto stringa StringReader StringWriter
File FileReader FileFriter
"piped" PipedReader PipedWriter
     

 

Esempio:
//: TestInput
import java.io.*;
public class TestInput {
public static void main(String args[]) {
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Come ti chiami ?");
System.out.println("Ciao "+in.readLine());
} catch (IOException e) { }
}
}

 

 

 

StreamTokenizer

La classe StreamTokenizer e’ usata per interrompere un InputStream in una sequenza "token" (gettoni), che sono porzioni di testo delimitati da un carattere prescelto.

StreamTokenizer st = new StreamTokenizer(File);

st.ttype = restituisce una descrizione del token:

st.EOL = end of file

st.TT_NUMBER = numero

st.TT_WORD = stringa o un carattere

 

 

StringTokenizer

Come StreamTokenizer limitato a stringhe di caratteri

I token saranno costituiti da tutti i caratteri separati da tab, spazi o nuove linee.

Es. "where is my cat?" = "where" "is" "my" "cat?"

Metodo next() = restituisce il nuovo token.

Esempio1
//:TestStringT.java
import java.util.*;
public class TestStringT {
public static void main(String args[]) {
StringTokenizer st;
String frase = "testo di prova";
st = new StringTokenizer(frase);
while(st.hasMoreTokens()) {
String s = st.nextToken();
System.out.println(s);
}
}
}

 

 

Esempio2
//:TestStringT.java
import java.util.*;
import java.io.*;
public class TestStringT2 {
public static void main(String args[]) {
String frase = new String("");
StringTokenizer st;
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Inserisci una frase:");
frase = in.readLine();
} catch (IOException e) { }
st = new StringTokenizer(frase);
while(st.hasMoreTokens()) {
String s = st.nextToken();
System.out.println(s);
}
}
}

 

 

 

Compressioni

Java 1.1 fornisce classi per leggere e scrivere in formato compresso, che derivano dalle classi Input/OutputStream

Classi Metodi Note
CheckedInputStream getCheckSum()  
CheckedOutputStream getCheckSum()  
DeflatedOutputStream   Classe base compressione
ZipOutputStream   DeflaterOutputStream che comprime i dati in formato .zip
GzipOutputStream   DeflaterOutputStream che comprime i dati in formato .gzip
InflaterInputStream   Classe base per decompressione
ZipInputStream    
GZipInputStream    

Es.

BufferedReader in = new BufferedReader(new GzipOutputStreamer(new FileOutputStream("test.gz")));

 

 

Serializzazione

Ogni oggetto che implementa l’interfaccia Serializable puo’ essere incanalato in una sequenza di byte e successivamente recuperato nell’oggetto originale.

L’interfaccia Serializable non ha metodi.

Per serializzare un oggetto basta creare un oggetto OutputStream (es. FileOutputStream) dentro un ObjectOutputStream. Con il metodo writeObject() l’oggetto sara’ serializzato nell’OutputStream.

Il processo inverso viene realizzato inserendo un InputStream dentro un ObjectInputStream e chiamando readObject().

L’interfaccia Externalizable (ha 2 metodi: writeExternal() e readExternal() che sono automaticamente chiamati) e’ usata come estensione dell’interfaccia Serializable per serializzazioni particolari come porzioni di oggetto o per creare un nuovo oggetto dopo che e’ stato serializzato.

 

 

1