Entrées-sorties en Java
Package [Link]
Classes
— class File
— final class FileDescriptor
— abstract class InputStream
— class ByteArrayInputStream
— class FileInputStream
— class FilterInputStream
— class BufferedInputStream
— class DataInputStream (interface DataInput)
— class LineNumberInputStream
— class PushbackInputStream
— class PipedInputStream
— class SequenceInputStream
— class StringBufferInputStream
— abstract class OutputStream
— class ByteArrayOutputStream
— class FileOutputStream
— class FilterOutputStream
— class BufferedOutputStream
— class DataOutputStream (interface DataOutput)
— class PrintStream
— class PipedOutputStream
— class RandomAccessFile (interfaces DataInput,DataOutput)
— class StreamTokenizer
Interfaces
Interface DataInput
Interface DataOutput
Interface FilenameFilter
Exceptions
2.27 Class EOFException
2.28 Class FileNotFoundException
2.29 Class IOException
2.30 Class InterruptedIOException
2.31 Class UTFDataFormatException
©A. Le Grand Université de Genève 1
Entrées-sorties en Java
Constructeurs
fichiers d’entrée
FileInputStream fis=new FileInputStream("toto");
DataInputStream d=new DataInputStream(fis);
fichiers de sortie
File f= new File(“toto”);
FileOutputStream fos=new FileInputStream(f);
DataOutputStream d=new DataOutputStream(fos);
flots standards
public final class [Link] extends [Link]{
// Fields
public static PrintStream err;
public static InputStream in;
public static PrintStream out;
// Methods
public static void arraycopy(Object src, int src_pos,
Object dst, int dst_pos, int length);
public static long currentTimeMillis();
public static void exit(int status);
public static void gc();
public static Properties getProperties();
public static String getProperty(String key);
public static String getProperty(String key, String def);
public static SecurityManager getSecurityManager();
public static void load(String filename);
public static void loadLibrary(String libname);
public static void runFinalization();
public static void setProperties(Properties props);
public static void setSecurityManager(SecurityManager s);
}
[Link]([Link]().getName());
résultat : [Link]
©A. Le Grand Université de Genève 2
Entrées-sorties en Java
exemples d’utilisation des flots
standards
import [Link].*;
public class lecture {
static public void main(String[] args)
{int x=0;
[Link]("saisie :");
[Link]();
try
{x=[Link]();
[Link]([Link]()+
" car. sont en attente.");
}
catch (IOException e)
[Link]([Link]());
[Link]("int lu :" + x);
[Link]("car. lu :" + (char) x);
}
}
2 exemples d’exécution
fin de saisie avec CTRL-D ou CTRL-Z fin de saisie avec CR
>java lecture >java lecture
saisie :ABCD3 car. sont en attente. saisie :ABCD
int lu :65 4car. sont en attente.
car. lu :A int lu :65
car. lu :A
©A. Le Grand Université de Genève 3
Entrées-sorties en Java
exemples d’utilisation des flots standards
import [Link].*;
public class majuscule2 {
static public void main(String[] args)
{int x=0;
[Link]("saisie :");
[Link]();
try{
do
{x=[Link];
[Link]([Link]((char) x));}
while ([Link]()>0);
[Link]([Link]()+
" car. sont en attente.");}
catch (IOException e)
[Link]([Link]());
} //main
} // class
2 exemples d’exécution
fin de saisie avec CTRL-D ou CTRL-Z fin de saisie avec CR
java majuscule2 java majuscule2
saisie :abcdeA saisie :abcde
B A
C B
D C
E D
0 car. sont en attente. E
0 car. sont en attente.
©A. Le Grand Université de Genève 4
Entrées-sorties en Java
variables d’environnement
programme
import [Link].*;
import [Link];
public class demoProperties {
static public void main(String[] args)
{Properties p=[Link]();
[Link]([Link]);}
}
exemple d’exécution :
-- listing properties --
[Link]=/unige/java/SUNWjws/JDK/bin/..
[Link]=1.0.2ss:08/01/96-23:00
[Link]=/
[Link]=
[Link]=Sun Microsystems Inc.
[Link]=legrand
[Link]=sparc
[Link]=Solaris
[Link]=[Link]
[Link]=/user/u3/legrand
[Link]=.:/unige/java/SUNWjws/JDK/bin/../clas...
[Link]=45.3
[Link]=2.x
[Link]=:[Link]=/user/u3/legrand
accès au répertoire de travail
import [Link].*;
public class getWorkingDir {
static public void main(String[] args)
{[Link]([Link]("[Link]"));}
}
©A. Le Grand Université de Genève 5
Entrées-sorties en Java
classe File
public class [Link] extends [Link] {
// Fields
public final static String pathSeparator;
public final static char pathSeparatorChar;
public final static String separator;
public final static char separatorChar;
// Constructors
public File(File dir, String name);
public File(String path);
public File(String path, String name);
// Methods
public boolean canRead();
public boolean canWrite();
public boolean delete();
public boolean equals(Object obj);
public boolean exists();
public String getAbsolutePath();
public String getName();
public String getParent();
public String getPath();
public int hashCode();
public boolean isAbsolute();
public boolean isDirectory();
public boolean isFile();
public long lastModified();
public long length();
public String[] list();
public String[] list(FilenameFilter filter);
public boolean mkdir();
public boolean mkdirs();
public boolean renameTo(File dest);
public String toString();
}
©A. Le Grand Université de Genève 6
Entrées-sorties en Java
Des sous-classes de File utiles
FichierLecture
Fichier
FichierEcriture
File
RepertoireEcriture
Repertoire
RepertoireLecture
import [Link].*;
public abstract class Fichier extends File{
public Fichier(String s) throws NullPointerException
{super(s);}
public String RepertoireDe()
{String NomComplet=[Link]();
return [Link](0,
[Link]([Link]));
}
}
import [Link].*;
public class FichierLecture extends Fichier{
public FichierLecture(String s)
throws IOException, NullPointerException
{super(s);
if (![Link]() || ![Link]())
throw new IOException( [Link]() +
": fichier inexistant.");
if (![Link]())
throw new IOException( [Link]() +
": fichier non lisible.");
}
}
©A. Le Grand Université de Genève 7
Entrées-sorties en Java
classe Repertoire
import [Link].*;
public abstract class Repertoire extends File {
private static final int lim=20;
public Repertoire(String s) throws IOException
{super(s);}
private void afficheUnFichier(String ref)
{File unElement= new File(this,ref);
[Link](([Link]())? "L":" ");
[Link](([Link]())? "E":" ");
[Link](" "+ref);
if ([Link]())
[Link]("\t"+"repertoire");
else if ([Link]())
[Link]("\t"+[Link]());
else [Link](" ????");
}
public void afficheListe(String[] fichiers)
{[Link]([Link]());
if ([Link]==0)
{[Link]("aucun fichier");
return;}
File unElement;
for(int i=0;i<[Link];i++)
{if ((i>0) && ((i % lim)==0))
{[Link]("<retour> pour continuer");
try {[Link]();}
catch (IOException e){}}
[Link](fichiers[i]); };
[Link](" "+[Link]+ " fichiers");
}
}
©A. Le Grand Université de Genève 8
Entrées-sorties en Java
classe RepertoireLecture
import [Link].*;
public class RepertoireLecture extends Repertoire {
public RepertoireLecture(String s) throws IOException
{super(s);
if (![Link]() || ![Link]())
throw new IOException( [Link]() +
": repertoire inexistant.");
if (![Link]())
throw new IOException( [Link]() +
": repertoire non lisible.");
}
}
Définition d’un filtre
import [Link].*;
class FiltreSuffixe implements FilenameFilter{
private String suffixe;
public FiltreSuffixe(String suffixe)
{[Link]=suffixe;}
public boolean accept(File dir, String nom)
{return [Link](suffixe);}
}
©A. Le Grand Université de Genève 9
Entrées-sorties en Java
Affichage du contenu d’un répertoire
import [Link].*;
public class AfficheRepertoire{
public static void main(String args[])
{Repertoire rep;
String[] fichiers;
try {
rep= new RepertoireLecture(args[0]);
switch ([Link])
{case 1:
fichiers=[Link]();
break;
case 2:
FilenameFilter ff;
ff= new FiltreSuffixe(args[1]);
fichiers=[Link](ff);
break;
default:
[Link](
"Usage: java AfficheRepertoire <nom> [filtre]");
return;} // switch
[Link](fichiers);} // try
catch (IOException e)
{[Link]([Link]());}
}
}
©A. Le Grand Université de Genève 10
Entrées-sorties en Java
copie de fichiers
import [Link].*;
public class CopieurFichier {
public static void copie(String src,String dest)
{FileInputStream s=null;
FileOutputStream d=null;
try {
FichierLecture Source= new FichierLecture(src);
FichierEcriture Destination=new FichierEcriture(dest);
s=new FileInputStream(Source);
d=new FileOutputStream(Destination);
byte[] tampon=new byte[1024];
int lu=0;
do {lu=[Link](tampon);
if (lu!=-1) [Link](tampon,0,lu);}
while (lu!=-1);
} // try
catch (IOException e)
{[Link]([Link]());}
finally
{ if (s!=null)
{try {[Link]();} catch (IOException e){}}
if (d!=null)
{try {[Link]();} catch (IOException e){}}
} // finally
} // copie
public static void main(String args[])
{if ([Link]!=2)
{[Link]("Usage: java CopieurFichier <src>
<dest>");
return;}
copie(args[0],args[1]);
}
}
©A. Le Grand Université de Genève 11
Entrées-sorties en Java
lecture filtrante d’un fichier
définition du filtre
public class RechercheMot extends FilterInputStream {
private String mot;
private int lineNumber;
DataInputStream fichier;
private int getLineNumber() {return lineNumber;}
public RechercheMot(DataInputStream fichier, String mot)
{super(fichier);
[Link]=fichier;
[Link]=mot;
lineNumber=0; }
public final String readLine() throws IOException
{String line;
do
{line=[Link]();
lineNumber++;}
while ((line!=null) && ([Link](mot)==-1));
return line;
}
}
©A. Le Grand Université de Genève 12
Entrées-sorties en Java
lecture filtrante d’un fichier
utilisation du filtre
import [Link].*;
public class Cherche {
public static void main(String args[])
{if ([Link]!=2)
{[Link](
"Usage: java Cherche <mot> <fichier>");
return;}
try
{FichierLecture f=new FichierLecture(args[1]);
FileInputStream fis=new FileInputStream(f);
DataInputStream d=new DataInputStream(fis);
RechercheMotif g=new RechercheMotif(d,args[0]);
String line;
do
{line=[Link]();
if (line!=null)
[Link]([Link]()+
": "+line);
}
while (line!=null);
[Link]();
}
catch (IOException e)
{[Link]([Link]());}
} //main
} //class
©A. Le Grand Université de Genève 13
Entrées-sorties en Java
compteur de mots
import [Link].*;
public class compteur {
public static void main(String args[]){
int nNombres=0;
int nMots=0;
FileInputStream fis=null;
StreamTokenizer st=null;
try
{fis=new FileInputStream(args[0]);
st=new StreamTokenizer(fis);}
catch (IOException e)
{[Link](
"usage: java compteur <filename>");
try {[Link]();} catch (IOException e1){}
[Link](1);}
// fin de ligne est un separateur d’unites syntaxiques
[Link](true);
// ’_’ fait partie des mots
[Link]((int) '_',(int)'_');
// ’.’ ne fait partie d’aucune unité syntaxique
[Link]((int) '.');
try
while ([Link]()!=st.TT_EOF)
{if ([Link]== st.TT_WORD)
{[Link]([Link]); nMots++;}
if ([Link]== st.TT_NUMBER)
{[Link]([Link]);nNombres++;}
} // while
catch (IOException e)
{[Link]("error when reading.");}
finally
{try {[Link]();} catch (IOException e1) {}}
[Link]("mots: "+ nMots);
[Link]("nombres: "+ nNombres);
}
}
©A. Le Grand Université de Genève 14