Randomaccessfile et bufferedreader, ecrire, lire, modifier et rechercher dans un fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 482 fois - Téléchargée 29 fois


Contenu du snippet


Source / Exemple :


/*********************************************************

	Nom du programme :	ExerciceFichier.java
	Auteur :			Zufferey Matthieu
	Date :				30.08.2002
	Description :		C'est un exercice sur les fichiers
	Préconditions :		Aucune

/********************************************************/

import java.io.* ;
import java.util.* ;

public class Exercice
	{
	public static void main(String[] args) throws IOException
		{
		File fichier = new File("employe.txt") ;

		RandomAccessFile donnee = new RandomAccessFile(fichier, "rw") ;
		int numero = 0 ;
		int choix = 0 ;
		int compteur = 1 ;
		double moyenne = 0 ;
		double newSalaire = 0 ;
		boolean sortie = false ;
		
		donnee.writeInt(compteur) ;
		donnee.writeChar(' ') ;
		donnee.writeUTF("Patolachi") ;
		donnee.writeChar(' ') ;
		donnee.writeUTF("Marcel") ;
		donnee.writeChar(' ') ;
		donnee.writeDouble(5500.00) ;
		donnee.writeChar('\n') ;
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in)) ;
		

		
		do
			{		
			do
				{
				try
					{
					System.out.println("Menu") ;
					System.out.println("====\n") ;
					System.out.println("1. Afficher les donnees") ;
					System.out.println("2. Calculer le salaire moyens") ;
					System.out.println("3. Ajouter un employe") ;
					System.out.println("4. Modifier le salaire d'un employe") ;
					System.out.println("5. Quitter") ;		
					choix = Integer.parseInt(in.readLine()) ;
					}
				catch(NumberFormatException e)
					{}
				}
			while(choix < 1 || choix > 5) ;

			switch(choix)
				{
				case 1 :
					{
					System.out.println() ;	
						
					donnee.seek(0) ;
					
					for (int i = 0 ; i < compteur ; i++)
						{
						try
							{
								System.out.print(donnee.readInt()) ;
								System.out.print(donnee.readChar()) ;
								System.out.print(donnee.readUTF()) ;
								System.out.print(donnee.readChar()) ;
								System.out.print(donnee.readUTF()) ;
								System.out.print(donnee.readChar()) ;
								System.out.print(donnee.readDouble()) ;
								System.out.print(donnee.readChar()) ;					
							}
						catch(EOFException e)
							{}
						}
										
					System.out.println() ;
					}				
				break ;
	
				case 2 :
					{
					System.out.println() ;	
					moyenne = 0 ;	
					donnee.seek(0) ;
					
					for (int i = 0 ; i < compteur ; i++)
						{
	
						try
							{
								donnee.readInt() ;
								donnee.readChar() ;
								donnee.readUTF();
								donnee.readChar() ;
								donnee.readUTF() ;
								donnee.readChar() ;
								moyenne += donnee.readDouble() ;
								donnee.readChar() ;					
							}
						catch(EOFException e)
							{}
						}
					
					System.out.println("La moyenne des salaires est de : " + (moyenne/compteur)) ;
										
					System.out.println() ;
					}				
				break ;
	
				case 3 :
					{
					System.out.println() ;	
						
					donnee.seek(donnee.length()) ;
					compteur += 1 ;
					
					try
						{
							donnee.writeInt(compteur) ;
							donnee.writeChar(' ') ;
							System.out.println("Entrez le nom du nouvel employe") ;
							donnee.writeUTF(in.readLine()) ;
							donnee.writeChar(' ') ;
							System.out.println("Entrez le prenom du nouvel employe") ;
							donnee.writeUTF(in.readLine()) ;
							donnee.writeChar(' ') ;
							System.out.println("Entrez le salaire du nouvel employe") ;
							donnee.writeDouble(Double.parseDouble(in.readLine())) ;
							donnee.writeChar('\n') ;					
						}
					catch(EOFException e)
						{}
										
					System.out.println() ;
					}				
				break ;

				case 4 :
					{
					System.out.println() ;	
						
					donnee.seek(0) ;
					
					do
						{
						System.out.println("Entrez le numero de l'employe a qui vous voulez change le salaire") ;
						numero = Integer.parseInt(in.readLine()) ;
						}
					while(numero < 0 || numero > compteur) ;
					
					System.out.println("Entrez le montant du nouveau salaire") ;
					newSalaire = Double.parseDouble(in.readLine()) ;
					
					int numDonnee = 0 ;
					
					try
						{
						for (int i = 0 ; i < compteur ; i++)
							{
							numDonnee = donnee.readInt() ;	
									
							if(numero == numDonnee)
								{
								donnee.readChar() ;
								donnee.readUTF() ;
								donnee.readChar();
								donnee.readUTF() ;
								donnee.readChar() ;
								donnee.writeDouble(newSalaire) ;
								donnee.readChar() ;	
								}
							else
								{
								donnee.readChar() ;
								donnee.readUTF() ;
								donnee.readChar();
								donnee.readUTF() ;
								donnee.readChar() ;
								donnee.readDouble() ;
								donnee.readChar() ;								
								}	
							}			
						}
					catch(EOFException e)
						{}
										
					System.out.println() ;
					}				
				break ;
				
				case 5 :
					{
					System.out.println() ;	
					sortie = true ;	
					}				
				break ;	
				
				}
			}
		while(sortie != true) ;
	

		System.exit(0) ;	
		}
	}

A voir également

Ajouter un commentaire Commentaires
indo__ Messages postés 29 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 4 février 2006
29 nov. 2004 à 02:55
c tres procedural :)
cs_waddle Messages postés 1 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 25 novembre 2004
25 nov. 2004 à 10:54
ouais...enfin c de C quoi....t'as le droit de faire de l'objet aussi avec un langage objet....

waddle

--
EPITA Student
Promo 2006
spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003
28 juil. 2003 à 10:25
J'ai un problème avec cette classe Exercice, vu que je voudrais conserver le fichier dans lequel on a ajouté des éléments, alors que tu crées un nouveau fichier à chaque fois. N'y a-t-il pas un moyen de remédier à ce problème, tout en gardant un RandomAccessFile? J'ai essayé avec un FileInputstream, mais c'est pas compatible, malheureusement... Merci de ton aide
polz Messages postés 31 Date d'inscription samedi 17 août 2002 Statut Membre Dernière intervention 6 juin 2006 1
26 juil. 2003 à 13:39
Ben en fait, tu reprends juste la méthode de modification du salaire et tu y changes les paramètres. Sinon, il y a un autre moyen qui consiste à écrire un objet dans un fichier (ca peut etre un vecteur ou autre chose). Si tu veux, je peux t'envoyer un code
spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003
23 juil. 2003 à 15:47
Dans ton code, ta méthode double.parseDouble ne fonctionnne pas chez moi, il faut plutot mettre Double.parseDouble !! C'est intéressant comme programme, puisque j'essaye en ce moment d'es faire un comme ça, mais dans une interface graphique.Au lieu d'un randomAccessFile, j'ai essayé avec un File et un objet Vector, qui marche à moitié...Est ce que ton code permet de modifier aussi le nom et le prénom ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.