TP N° 10 : Gestion des fichiers Langage JAVA - Toubkal-it

Page 1
M. LACHGAR Med
TP N° 10 : Gestion des fichiers
Langage JAVA
Rappel :
Exemple d’utilisation de FileReader/FileWriter
BufferedReader et PrintWriter
Utiles pour la lecture et l'écriture de fichiers textes.
import java.io.*;
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("in.txt");
File outputFile = new File("out.txt");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}
BufferedReader in =
new
BufferedReader(
new
FileReader("in.txt"));
String str;
while ((str=in.readLine()) != null) {
// faire quelque chose avec la ligne
System.out.println(str);
}
in.close();
BufferedReader in =
new
BufferedReader(
new
InputStreamReader(System.
in
));
PrintWriter out = new PrintWriter(new FileWriter("in.txt"));
out.println(in.readLine().toLowerCase().toString());
out.println(in.readLine().toString());
out.close();
Page 2
M. LACHGAR Med
Exemple :
La classe File
Une classe qui permet de manipuler des fichiers et des répertoires sans toutefois accéder aux
données dans les fichiers.
File myFile = new File("file");
// Si on se trouve dans le répertoire courant
String relative = myFile.getPath(); // retourne "fichier.txt"
System.out.println(relative);
String absolute = myFile.getAbsolutePath();
System.out.println(absolute);
// C:\Users\lachgar\workspace\Exception\in.txt
System.out.println(absolute);
boolean there = myFile.exists(); // vrai ou faux si le fichier existe ou non
System.out.println(there);
boolean checkDir = myFile.isDirectory(); // si le fichier est un répertoire
System.out.println(checkDir);
long myLength = myFile.length(); // taille du fichier.
System.out.println(myLength);
// retourne les différents fichiers dans un répertoire
String[] allfiles = myFile.list();
for(String st : allfiles)
System.out.println(st);
import java.io.*;
public class Copy {
public static void main(String[] args) {
try {
BufferedReader in = new BufferedReader(new FileReader("file/in.txt"));
PrintWriter out = new PrintWriter(new FileWriter("file/out.txt"));
String str;
while(((str = in.readLine()) != null)){
out.println((int)Math.pow(Integer.parseInt(str), 2));
}
out.close();
in.close();
} catch (FileNotFoundException e) {
System.out.println("Fichier introuvable");
} catch (IOException e) {
e.getMessage();
}
}
}
2
4
5
12
4
16
25
144
81
in.txt out.txt
Page 3
M. LACHGAR Med
ObjectInputStream et ObjectOutputStream
permettent de lire et écrire des objets sur un stream.
Un objet doit implémenter l'interface Serializable pour pouvoir être écrit ou lu.
L'interface Serializable contient les deux méthodes suivantes :
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream) throws IOException;
Exemple:
class Etudiant implements Serializable {
String nom;
String prenom;
double note;
Etudiant(String n, String p, double n) {
nom = n;
prenom = p;
note = n;
}
private void readObject(java.io.ObjectInputStream stream) {
nom = (String) stream.readObject();
prenom = (String) stream.readObject();
note = stream.readDouble();
}
private void writeObject(java.io.ObjectOutputStream stream) {
stream.writeObject(nom);
stream.writeObject(prenom);
stream.writeDouble(note);
}
}
Etudiant e = new Etudiant("salhi","samir",90);
FileOutputStream fos = new FileOutputStream("etd.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(e);
oos.close();
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
Etudiant e2 = (Etudiant) ois.readObject();
ois.close();
Page 4
M. LACHGAR Med
Problem A : Nombres opposés
Etant donné un tableau d'entiers non nuls, trouvez combien il y a d'entiers distincts positifs dont
l'opposé est aussi dans le tableau.
Par exemple, pour le tableau de taille 15 qui suit:
-3 4 2 8 9 1 -3 -8 -4 2 8 2 -8 1 3
il faut afficher 3. En effet, les trois entiers 3, 4, et 8 ont aussi leur opposé dans le tableau.
LIMITES DE TEMPS ET DE MEMOIRE (Langage : C++)
Temps : 1s sur une machine à 1Ghz.
Mémoire : 16000 Ko.
CONTRAINTES
1 <= N <= 20000, où N est le nombre d'éléments du tableau.
-10<SUP>8</SUP> < X < 10<SUP>8</SUP>, et X différent de 0, où X est un élément du
tableau.
De plus, dans 50% des tests, on a :
1 <= N <= 1000.
ENTRÉE
La première ligne de l'entrée contient un entier N, la taille du tableau.
La deuxième ligne contient N entiers parés par des espaces : les éléments du tableau.
SORTIE
Vous devez écrire une ligne sur la sortie, contenant un entier K : le nombre d'entiers distincts X > 0,
tels que X et –X appartiennent tous les deux au tableau.
EXEMPLE
entrée :
15
-3 4 2 8 9 1 -3 -8 -4 2 8 2 -8 1 3
sortie :
3
Page 5
M. LACHGAR Med
Solution :
import
java.io.*;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class ProblemeA {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new FileReader("file/in.txt"));
PrintWriter out = new PrintWriter(new FileWriter("file/out.txt"));
int n = Integer.parseInt(in.readLine().toString());
StringTokenizer st = new StringTokenizer(in.readLine()," ");
Set <Integer> set = new TreeSet<Integer>();
Set <Integer> set2 = new TreeSet<Integer>();
while(st.hasMoreElements()){
set.add(Integer.parseInt(st.nextElement().toString()));
}
int size1 = set.size();
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
set2.add(Math.abs(it.next()));
}
out.println(size1 - set2.size());
out.close();
in.close();
}
}
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !