Vous êtes sur la page 1sur 11

Formation Java/J2EE- le package java.io.

*
TP : Développement d’une application JAVA exploitant le package java.io.*
Date : 19/11/2013

Par : M. Abbou

I-Objectif du TP

L’objectif de ce TP est de vous montrer comment manipuler les fichiers via JAVA.

Vous allez apprendre comment :

Utiliser la classe Scanner ;


Utiliser la classe InputStream ;
Lire un fichier avec java.io.BufferedReader ;
Ecrire dans un fichier avec java.io.BufferedWriter;
Ecrire dans un fichier avec java.io.PrintWriter;
Lire un fichier ZIP avec la classe ZipInputStream ;
Utiliser la classe RandomAccessFile ;
Exploiter l’api APACHE POI pour le traitement des fichiers de Microsoft Office.

Partie I- Lecture d’un clavier [Scanner]

1. Créer une classe LectureClavier.java contenant la méthode main ()..

2. Dans la méthode main instancié un objet de type java.util.Scanner.


Noter que le constructeur de la classe Scanner prend le paramètre System.in.

3. Appeler la méthode nextLine() et afficher la chaine de caractère tapée à partir du


clavier.

Formation Java/J2EE – IO : TP 1 1
4. Appeler la méthode nextInt() et récupérer deux nombres puis faire la somme.

Partie II- Lecture d’un fichier de paramètres en utilisant la classe abstract


InputStream

1. Créer le fichier de conf conf.properties et le mettre dans le CLASSPATH (dossier


src).

2. Remplissez le fichier de conf par exemple :


param1=value1
param2=value2

3- Créer la classe LirePropertiesFile comme suit :

package ma.cigma.formation.javaj2ee.io;

import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class LirePropertiesFile {

Formation Java/J2EE – IO : TP 1 2
private static final String CONF_FILE="conf.properties";
private Properties prop=new Properties();

private void lire(String fileName) throws IOException {


prop.load(this.getClass().getClassLoader().getResourceAsStream(fileName));
}

public static void main(String[] args) {


LirePropertiesFile instance=new LirePropertiesFile();
try {
instance.lire(CONF_FILE);
System.out.println("le contenu fu fichier " + CONF_FILE + " est: ");
Set<Object> keys=instance.prop.keySet();
for (Object object : keys) {
System.out.println(object + " " +
instance.prop.getProperty(object.toString()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Partie III- Lire et Ecrire avec java.io.BufferedReader et


java.io.BufferedWriter

1. Créer le fichier de conf paramconf.properties et le mettre dans le package


ma.cigma.formation.javaj2ee.io.conf.

2. Remplissez le fichier de conf par exemple :


path-to-file1=c:\\file1.txt
path-to-file2=c:\\file2.txt

3- Créer la classe LirePropertiesFile2 comme suit :


package ma.cigma.formation.javaj2ee.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class LireEtEcrireFile {
public static void main(String[] args) {
ResourceBundle rb = null;
rb = PropertyResourceBundle
.getBundle("ma.cigma.formation.javaj2ee.io.conf.paramconf");
String fileLecture = rb.getString("file_lecture");
String fileEcriture = rb.getString("file_ecriture");

Formation Java/J2EE – IO : TP 1 3
System.out.println(fileLecture);
System.out.println(fileEcriture);
// Pour lire dans le fichier
File file = new File(fileLecture);
FileReader fr;
try {
fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);

String line = bfr.readLine();


while (line != null) {
System.out.println(line);
line = bfr.readLine();
}
// Pour écrire dans le fichier
FileWriter frWrite = new FileWriter(fileEcriture);
BufferedWriter bfrWrite = new BufferedWriter(frWrite);
bfrWrite.write("sdsdsd");
bfrWrite.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Partie IV- Ecrire avec java.io.PrintWriter


1. Créer le fichier de conf paramconf.properties et le mettre dans le package
ma.cigma.formation.javaj2ee.io.conf.

2. Remplissez le fichier de conf par exemple :


path-to-file=c:\\file2.txt

3- Créer la classe LireEtEcrireFile2comme suit :


package ma.cigma.formation.javaj2ee.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class LireEtEcrireFile2 {
public static void main(String[] args) {
ResourceBundle rb = null;
rb =
PropertyResourceBundle.getBundle("ma.cigma.formation.javaj2ee.io.conf.paramconf");
String fileEcriture = rb.getString("file_ecriture");
System.out.println(fileEcriture);
try {
// Pour écrire dans le fichier
PrintWriter pw = new PrintWriter(new File(fileEcriture));
pw.println("encore une ligne 1");
pw.println("encore une ligne 2");
pw.print(1236d);

Formation Java/J2EE – IO : TP 1 4
pw.flush();
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

Partie V- Lecture d’un fichier ZIP


1- Créer deux fichiers text (exemple1.txt et exemple2.txt). Insérer des données dans
les deux fichiers.

2- Compresser le fichier (par exemple exemple.zip).

3- Créer la classe LireFichierZip et implémenter la méthode main comme suit :


package ma.cigma.formation.javaj2ee.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class LireFichierZip {
public static void main(String[] args) {
String file = "C:/workspace/exemple.zip";
try {
ZipInputStream zipFile = new ZipInputStream(new
FileInputStream(file));
ZipEntry ze = zipFile.getNextEntry();
while (ze != null) {
System.out.println(ze.getName());
for (int c = zipFile.read(); c != -1; c = zipFile.read())
System.out.print((char) c);
ze = zipFile.getNextEntry();
System.out.println("");
}
zipFile.closeEntry();
zipFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

4- Exécuter le programme et observer le résultat.

Formation Java/J2EE – IO : TP 1 5
Partie VI- Accéder directement aux données avec RandomAccessFile

1- Créer la classe TestRandomAccesFileet implémenter la méthode main comme suit :

package ma.cigma.formation.javaj2ee.io;

import java.io.RandomAccessFile;

public class TestRandomAccesFile {


public static void main(String[] args) {

try {
//Pour écrire :
RandomAccessFile out = new RandomAccessFile("monfichier.dat", "rw");
for (int i = 0; i < 10; i++) {
out.writeInt(i * 100);
}
out.close();
//Pour lire :
RandomAccessFile in = new RandomAccessFile("monfichier.dat", "rw");
for (int i = 0; i < 10; i++) {
System.out.println(in.readInt());
}
in.close();
//Pour récupérer un enregistrement directement :
System.out.println("L'enreistrement lu est :");
RandomAccessFile anotherFile = new RandomAccessFile("monfichier.dat", "rw");
// 5 représente le sixième enregistement puisque le premier commence à 0
// 4 est la taille des données puisqu'elles sont des entiers de type int
// (codé sur 4 octets)
anotherFile.seek(5*4);
System.out.println(anotherFile.readInt());
anotherFile.close();
//Pour Modifier un enregistrement directement :
RandomAccessFile anotherFile2 = new RandomAccessFile("monfichier.dat", "rw");
// 5 représente le sixième enregistement puisque le premier commence à 0
// 4 est la taille des données puisqu'elles sont des entiers de type int
// (codé sur 4 octets)
anotherFile2.seek(5*4);
anotherFile2.writeInt(777);
anotherFile.close();
//Pour lire :
System.out.println("Lire après modification");
RandomAccessFile in2 = new RandomAccessFile(
"monfichier.dat", "rw");
for (int i = 0; i < 10; i++) {
System.out.println(in2.readInt());
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}

}
}

Formation Java/J2EE – IO : TP 1 6
2- Exécuter le programme et observer le résultat.

Partie VII- Performance des flux « bufferisés »

Dans cet exemple, nous allons comparer les temps de réponse de lecture d’un fichier avec
FileInputStream et BufferedInputStream. Vous allez voir que la classe
BufferedInputStream est plus performante.

1- Créer la classe TestVitesseFlux et implémenter la méthode main comme suit :

package ma.cigma.formation.javaj2ee.io;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestVitesseFlux {


public static void main(String[] args) {
FileInputStream fis;
BufferedInputStream bis;
try {
fis = new FileInputStream(new File("C:/exemple1.txt"));
bis = new BufferedInputStream(new FileInputStream(new File("C:/exemple1.txt")));
byte[] buf = new byte[8];
long startTime = System.currentTimeMillis();
while (fis.read(buf) != -1)
;

System.out.println("Temps de lecture avec FileInputStream : "+


(System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
while (bis.read(buf) != -1)
;
System.out.println("Temps de lecture avec BufferedInputStream : "+
(System.currentTimeMillis() - startTime));
fis.close();
bis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

2- Exécuter le programme et observer le résultat.

Formation Java/J2EE – IO : TP 1 7
Partie VIII- Exploitation de l’api APACHE POI

Création d’un fichier Excel

1- Ajouter les JAR listés ci-après au CLASSPATH :

Formation Java/J2EE – IO : TP 1 8
2- Créer la classe PoiWriteExcelFile comme suit :
package ma.cigma.formation.javaj2ee.io.poi;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class PoiWriteExcelFile {

public static void main(String[] args) {


try {
FileOutputStream fileOut = new FileOutputStream("poi-test.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet worksheet = workbook.createSheet("POI Worksheet");

// index from 0,0... cell A1 is cell(0,0)


// Il s'agit de la ligne 1 dans le fichier Excel
HSSFRow row1 = worksheet.createRow(0);

//Première cellule dans la ligne 1


HSSFCell cellA1 = row1.createCell(0);
cellA1.setCellValue("Hello");
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.GOLD.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellA1.setCellStyle(cellStyle);

//Deuxième cellule dans la ligne 1


HSSFCell cellB1 = row1.createCell(1);
cellB1.setCellValue("Goodbye");
cellStyle = workbook.createCellStyle();

cellStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellB1.setCellStyle(cellStyle);

//Troixième cellule dans la ligne 1


HSSFCell cellC1 = row1.createCell(2);
cellC1.setCellValue(true);

//Quatrième cellule dans la ligne 1


HSSFCell cellD1 = row1.createCell(3);
cellD1.setCellValue(new Date());
cellStyle = workbook.createCellStyle();

cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
cellD1.setCellStyle(cellStyle);

workbook.write(fileOut);
fileOut.flush();
fileOut.close();

Formation Java/J2EE – IO : TP 1 9
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

3- Exécuter la méthode main. Le fichier poi-test.xls devrait être crée :

Création d’un fichier Word

1- Ajouter les JAR au CLASSPATH. (mêmes JARs utilisés pour la première partie).

2- Créer la classe CreateDocumentFromScratch comme suit :


package ma.cigma.formation.javaj2ee.io.poi;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xwpf.usermodel.Borders;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.VerticalAlign;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class CreateDocumentFromScratch {


public static void main(String[] args) {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraphOne = document.createParagraph();
paragraphOne.setAlignment(ParagraphAlignment.CENTER);
paragraphOne.setBorderBottom(Borders.SINGLE);
paragraphOne.setBorderTop(Borders.SINGLE);

Formation Java/J2EE – IO : TP 1 10
paragraphOne.setBorderRight(Borders.SINGLE);
paragraphOne.setBorderLeft(Borders.SINGLE);
paragraphOne.setBorderBetween(Borders.SINGLE);
XWPFRun paragraphOneRunOne = paragraphOne.createRun();
paragraphOneRunOne.setBold(true);
paragraphOneRunOne.setItalic(true);
paragraphOneRunOne.setText("Hello world! This is paragraph one!");
paragraphOneRunOne.addBreak();
XWPFRun paragraphOneRunTwo = paragraphOne.createRun();
paragraphOneRunTwo.setText("Run two!");
paragraphOneRunTwo.setTextPosition(100);
XWPFRun paragraphOneRunThree = paragraphOne.createRun();
paragraphOneRunThree.setStrike(true);
paragraphOneRunThree.setFontSize(20);
paragraphOneRunThree.setSubscript(VerticalAlign.SUBSCRIPT);
paragraphOneRunThree.setText(" More text in paragraph one...");
XWPFParagraph paragraphTwo = document.createParagraph();
paragraphTwo.setAlignment(ParagraphAlignment.DISTRIBUTE);
paragraphTwo.setIndentationRight(200);
XWPFRun paragraphTwoRunOne = paragraphTwo.createRun();
paragraphTwoRunOne.setText("And this is paragraph two.");
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream("poi-test.doc");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
document.write(outStream);
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

3- Exécuter la méthode main. Le fichier poi-test.word devrait être crée :

Formation Java/J2EE – IO : TP 1 11

Vous aimerez peut-être aussi