Rechercher : dans
Par :

Lire un fichier texte en java

Dernière réponse le 14 jui 2009 à 15:53:57 Nathalie, le 16 jan 2004 à 12:01:58 
 Signaler ce message aux modérateurs

Salut !
je voudrai lire un fichier texte ligne par ligne en java mais je ne sais pas comment faire.
Merci d'avance

Nathalie

1

lof., le 16 jan 2004 à 13:12:01
  • +18

Salut,

un petit exemple :


import java.io.*;

public class ReadFile {
	public static void main(String[] args){
		String chaine="";
		String fichier ="fichiertexte.txt";
		
		//lecture du fichier texte	
		try{
			InputStream ips=new FileInputStream(fichier); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);
			String ligne;
			while ((ligne=br.readLine())!=null){
				System.out.println(ligne);
				chaine+=ligne+"\n";
			}
			br.close(); 
		}		
		catch (Exception e){
			System.out.println(e.toString());
		}
	
		//création ou ajout dans le fichier texte
		try {
			FileWriter fw = new FileWriter (fichier);
			BufferedWriter bw = new BufferedWriter (fw);
			PrintWriter fichierSortie = new PrintWriter (bw); 
				fichierSortie.println (chaine+"\n test de lecture et écriture !!"); 
			fichierSortie.close();
			System.out.println("Le fichier " + fichier + " a été créé!"); 
		}
		catch (Exception e){
			System.out.println(e.toString());
		}		
	}
}



Il y a déjà eu des réponses mais je n'arrive pas à trouver le post ...

arrrff
lof.

Répondre à lof.

21

 toumi23, le 14 jui 2009 à 15:53:57
  • +1

Bonjour
moi j'ai besoin de lire un fichier texte qui est enregistrer dans C:/
comment faire???

Répondre à toumi23

2

javabaka, le 18 avr 2008 à 04:20:53
  • +5

Le code ci dessous permet de lire un fichier, et de l'afficher, le fichier doit être à la racine de ton projet

public void affiche() throws IOException {
		String ligne = "";
		String fichier = "";
		BufferedReader clavier = new BufferedReader(new InputStreamReader(
				System.in));

		System.out.println("Quel est le nom de votre fichier ?");
		fichier = clavier.readLine();
		BufferedReader ficTexte;
		try {
			ficTexte = new BufferedReader(new FileReader(new File(fichier)));
			if (ficTexte == null) {
				throw new FileNotFoundException("Fichier non trouvé: "
						+ fichier);
			}
			do {
				ligne = ficTexte.readLine();
				if (ligne != null) {
					System.out.println(ligne);
				}
			} while (ficTexte != null);
			ficTexte.close();
			System.out.println("\n");
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}

	}

Répondre à javabaka

3

TitiRani, le 22 jui 2008 à 17:28:49

Bonjour,

Je viens de mettre au java et j' essai de lire des fichiers texte.
Maintenant, j' essai de lire une seule ligne du texte mais je n'y parviens pas.
Je viens de récupérer les bouts de code au dessus et j' essai en fait de le modifier pour pouvoir lire seulement une seule d'un fichier texte que j'entrerai en entrée.
Quelqu'un saurais comment modifier le deuxième code pour pouvoir faire cela s'il vous plait?

Merci bcp

Répondre à TitiRani

4

danimo, le 22 jui 2008 à 19:25:06

Salut.


public void affiche() throws IOException

{
String ligne = "";
String fichier = "";

String ligne_a_trouver = ""; // <<<<<<<<<<<<<<<<<<<<< ajouter

BufferedReader clavier = new BufferedReader(new InputStreamReader(
System.in));

System.out.println("Quel est le nom de votre fichier ?");
fichier = clavier.readLine();

System.out.println("Ligne a chercher"); // par ex. tata titi toto <<<<<<<<<<<<<<<<<<<<< ajouter
ligne_a_trouver = clavier.readLine(); // <<<<<<<<<<<<<<<<<<<<< ajouter
ligne_a_trouver = "003C004 4 java.awt.color.ICC_ProfileGray";
BufferedReader ficTexte;
try {
ficTexte = new BufferedReader(new FileReader(new File(fichier)));
if (ficTexte == null) {
throw new FileNotFoundException("Fichier non trouvé: "
+ fichier);
}
do {
ligne = ficTexte.readLine();
if (ligne != null) {
if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<<<<<<< ajouter
{ // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println(ligne);
break; // <<<<<<<<<<<<<<<<<<<<< ajouter
} // <<<<<<<<<<<<<<<<<<<<< ajouter
}
} while (ficTexte != null);
if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println("Trouve !"); // <<<<<<<<<<<<<<<<<<<<< ajouter
else // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println("Non trouve !"); // <<<<<<<<<<<<<<<<<<<<< ajouter
ficTexte.close();
System.out.println("\n");
}

catch (FileNotFoundException e) {

System.out.println(e.getMessage());
}

catch (IOException e) {

System.out.println(e.getMessage());
}
}

Répondre à danimo

5

danimo, le 22 jui 2008 à 19:32:20
  • +4

PS

Tu peux l'essayer avec ceci :


import java.io.*;


public class tatatititoto

{

public static void affiche() //throws IOException

{
String ligne = "";
String fichier = "";

String ligne_a_trouver = ""; // <<<<<<<<<<<<<<<<<<<<< ajouter
try
{
BufferedReader clavier = new BufferedReader(new InputStreamReader(
System.in));

System.out.println("Quel est le nom de votre fichier ?"); // AVEC L'EXTENSION .txt
fichier = clavier.readLine();

System.out.println("Ligne a chercher"); // par ex. tata titi toto <<<<<<<<<<<<<<<<<<<<< ajouter
ligne_a_trouver = clavier.readLine(); // <<<<<<<<<<<<<<<<<<<<< ajouter BufferedReader ficTexte;
// try {
ficTexte = new BufferedReader(new FileReader(new File(fichier)));
if (ficTexte == null) {
throw new FileNotFoundException("Fichier non trouvé: "
+ fichier);
}
do {
ligne = ficTexte.readLine();
if (ligne != null) {
if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<<<<<<< ajouter
{ // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println(ligne);
break; // <<<<<<<<<<<<<<<<<<<<< ajouter
} // <<<<<<<<<<<<<<<<<<<<< ajouter
}
} while (ficTexte != null);
if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println("Trouve !"); // <<<<<<<<<<<<<<<<<<<<< ajouter
else // <<<<<<<<<<<<<<<<<<<<< ajouter
System.out.println("Non trouve !"); // <<<<<<<<<<<<<<<<<<<<< ajouter
ficTexte.close();
System.out.println("\n");
}

catch (FileNotFoundException e) {

System.out.println(e.getMessage());
}

catch (IOException e) {

System.out.println(e.getMessage());
}
}

public static void main (String[] args)

{
affiche();
System.exit(0);
}
}

Répondre à danimo

6

Titirani, le 22 jui 2008 à 21:07:35

Merci beaucoup pour ta réponse danimo. J'avais pas penser à cette méthode de recherche.
Mais avec ce code en fait on recherche un texte dans chaque ligne. A priori il faut connaitre le texte de la ligne recherchée. Je génere un texte qui contient des prénoms entrés de façon aléatoire (à chaque ligne un prénom different) et j'aimerais récuperer seulement un prénom, au hasard, du fichier mais sans connaitre le prénom. La seule information que je veut utiliser et le numéro de la ligne.

Toute suggestion est la bienvenue.
Merci encore Danimo.

Répondre à Titirani

7

danimo, le 22 jui 2008 à 22:38:27
  • +4

Salut.

Aulieu d'entrer un texte, tu demandes et entres un no de ligne :

int ctr = 0;

il faut convertir le String ligne_a_trouver en int : int nligne = Integer.parseInt(ligne_a_trouver);

puis a chaque lecture ctr++;

if (ctr == nligne ) c'est ok




int ctr = 0; // <<<<<<<<< ajouter
System.out.println("Ligne a chercher"); // un no
ligne_a_trouver = clavier.readLine();
BufferedReader ficTexte;
try // <<<<<<<<< ajouter
{ // <<<<<<<<< ajouter
int nligne = Integer.parseInt(ligne_a_trouver); // <<<<<<<<< ajouter
} // <<<<<<<<< ajouter
catch (IOException e)
{ // <<<<<<<<< ajouter
System.out.println(e.getMessage()); // entree non numerique // <<<<<<<<< ajouter
// voir que faire dans ce cas // <<<<<<<<< ajouter
} // <<<<<<<<< ajouter

// try {
ficTexte = new BufferedReader(new FileReader(new File(fichier)));
if (ficTexte == null) {
throw new FileNotFoundException("Fichier non trouvé: "
+ fichier);
}
do {
ligne = ficTexte.readLine();
if (ligne != null) {
ctr++; // <<<<<<<<< ajouter
//if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<­<<<<<< remplacer
if (ctr == nligne ) // <<<<<<<<< ajouter
{
System.out.println(ligne);
break;
}
}
} while (ficTexte != null);
//if (ligne.equals(ligne_a_trouver)) // <<<<<<<<<<<<<<<­<<<<<< remplacer
if (ctr == nligne ) // <<<<<<<<< ajouter
System.out.println("Trouve !");
else
System.out.println("Non trouve la ligne n'existe pas !");

Quelque chose comme ca.

Cordialement.

Dan

Répondre à danimo

8

danimo, le 22 jui 2008 à 23:09:32

Quelques petites modifications :


try // <<<<<<<<< ajouter
{ // <<<<<<<<< ajouter
int nligne = Integer.parseInt(ligne_a_trouver); // <<<<<<<<< ajouter
} // <<<<<<<<< ajouter
catch (IOException e)
{ // <<<<<<<<< ajouter
System.out.println(e.getMessage()); // entree non numerique // <<<<<<<<< ajouter
// voir que faire dans ce cas // <<<<<<<<< ajouter
} // <<<<<<<<< ajouter

a remplacer par

int nligne = 0; // <<<<<<<<<<<<<<<
try
{
nligne = Integer.parseInt(ligne_a_trouver); // <<<<<<<<<<<<<<<
}
catch (NumberFormatException e) // <<<<<<<<<<<<<<<
{
System.out.println(e.getMessage()); // entree non numerique
// voir que faire dans ce cas
}

Répondre à danimo

9

TitiRani, le 23 jui 2008 à 13:00:29

Merci beaucoup danimo j'aurais mis un temps fou à trouver ça tout seul surtout à mon niveau.
J'ai presque réussi à faire ce que je voulais faire. Je vais essayer de trouver ce qui me reste tout seul :) comme un grand.

Encore Merci et surtout pour la rapidité de tes réponses;)
Bonne journée à toi

Répondre à TitiRani

10

TitiRani, le 30 jui 2008 à 12:57:45

Coucou c'est encore moi :)
J'ai donc réussi à faire faire à mon programme ce que j'en attendais mais un problème persiste et j'ai beau essayé tout et n'importe quoi je n'arrive pas à résoudre mon souci.
En fait, dans ma boucle for, ma variable numeroligne prend parfois des valeurs non comprises entre borne1 et borne2. Mais je ne veux que des valeurs comprises entre ma borne1 et ma borne2.
Pourrais tu m'aider à trouver la solution à mon problème si tu as le tps?

voici ma boucle for:

int alpha = 0; //c'est un compteur

String ligne;
String valeur; // contenu de la ligne i lue dans le fichier nomFichier

for (int i = 1; i <= N; i++) {
int numeroLigne = 0;
ligne = CodeDossier+";";
valeur = "";
int borne1; //borne minimum
int borne2; //borne maximum
int numindex = 0;
while (numindex <= 4) {
Random rand = new Random();
borne1 = 1 + numindex * 1000;
borne2 = (1 + numindex) * 1000;
do {
numeroLigne = borne1 + rand.nextInt(borne2);
}while(numeroLigne <= borne1 && numeroLigne >= borne2 );

System.out.println("BORNE 1--------"+borne1);
System.out.println("BORNE 2--------"+borne2);
valeur = advReadLine.lireLigne(nomFichier, numeroLigne, N);
ligne = ligne + ";" + valeur;
numindex++;
}

if (alpha % 10 == 0) {
Random rand = new Random();
borne1 = 5001;
borne2 = 6000;
System.out.println("BORNE 1--------"+borne1);
System.out.println("BORNE 2--------"+borne2);
numeroLigne = borne1 + rand.nextInt(borne2);
System.out.println("NumLigne" +numeroligne);
valeur = advReadLine.lireLigne(nomFichier, numeroLigne, N);
ligne = ligne + ";" + valeur;
}


ligne = ligne + ";" + i + ext;
//writeFile("Fichier_N_Docs.txt", ligne);
writeFile("Fichier_N_Docs.txt", ligne);
alpha++;
}


Merci beaucoup
Bonne journée

Répondre à TitiRani

11

danimo, le 30 jui 2008 à 18:08:19

Bonjour,

Peux-tu m'indiquer comment est decrite et initialisee N ?
Ensuite si tu veux bien recuperer ENTRE borne1 et borne2 (donc bornes non comprises).

Ce sont les premieres questions qui me viennent a l'esprit. Il y en aura surement d'autres.

Cordialement.

Dan

Répondre à danimo

12

danimo, le 30 jui 2008 à 18:19:55

Bonjour,

Peux-tu m'indiquer comment est decrite et initialisee N avant la boucle ?
Ensuite si tu veux bien recuperer ENTRE les bornes 1 et 2 (donc bornes non comprises) ou non.

Ce sont les 2 questions qui me sont venues a l'esprit, il y en aura certainement d'autres.

Dan.

Répondre à danimo

13

danimo, le 30 jui 2008 à 19:15:43

Une petite chose TitiRani, il serait preferable de continuer sur un nouveau post plutot que sur le post de Natalie dont le probleme est resolu (c'est ce que tu aurais du faire des ta premiere question).

A++ sur ce nouveau post.

Cordialement.

Dan

Répondre à danimo

14

danimo, le 31 jui 2008 à 09:37:38

Salut,


if (alpha % 10 == 0) {
Random rand = new Random();
borne1 = 5001;
borne2 = 6000;
System.out.println("BORNE 1--------"+borne1);
System.out.println("BORNE 2--------"+borne2);
numeroLigne = borne1 + rand.nextInt(borne2);
System.out.println("NumLigne" +numeroligne);
valeur = advReadLine.lireLigne(nomFichier, numeroLigne, N);
ligne = ligne + ";" + valeur;
}

// Ne manquerait-il pas else ici ? **********************??????????
ligne = ligne + ";" + i + ext;
//writeFile("Fichier_N_Docs.txt", ligne);
writeFile("Fichier_N_Docs.txt", ligne);
alpha++;


Cordialement.


Dan

Répondre à danimo

15

peutImporte, le 29 déc 2008 à 03:52:14

Pour les personnes qui utiliserons le code proposé par javabaka (qui est tres pratique cela dit) une erreur est présente :

} while (ficTexte != null); -> le buffer ne sera jamais egal à null .. cf fonctionnement des buffers
Il faut ecrire : } while (ligne != null); dans la meme logique (j'vais pas m'étendre sur la redondance de la condition, ai pas assez de coca pour ca :D )

quoi qu'il en soit merci

Répondre à peutImporte

16

peutImporte, le 29 déc 2008 à 04:05:25
  • +2

Rhaa j'résiste pas :

do {
ligne = ficTexte.readLine();
if (ligne != null) {
System.out.println(ligne);
}
} while (ficTexte != null);

devient :

for(;;) {
ligne = ficTexte.readLine();
if (ligne == null) break;
System.out.println(ligne);
}

1) La boucle ne tourne plus à l'infini ( le buffer ne sera jamais null, pour ceux qui doutent, tester avec un debug. )
2) Style plus fun qu'avec la double condition : )

a+

Répondre à peutImporte

17

mia22, le 13 jan 2009 à 11:54:29

Bonjour.je voudrai lire un fichier texte en java caractere par caractere.plz help me.merci d'avance.

Répondre à mia22

18

peutImporte, le 20 jan 2009 à 04:50:08

Mia22 .. Ce thread concerne le sujet : "Lire un fichier texte en java" et est RESOLU ..

Regarde sur le forum si tu trouves pas réponse à ta question concernant les traitements sur les "String", sinon tu peux toujours poster une nouvelle demande mais à mon avis cette question a déjà été traitée dans un autre Thread (titre, sujets de conversations)

a+

Répondre à peutImporte

19

imed eddine, le 14 fév 2009 à 12:26:48
  • +1

Salut tout le monde
j'ai besoin dans mon PFE un code avec java pour filtrer un fichier.doc mot par mot,c a d ces mot la sont spécifiques et puis j'affiche tous les informations consernants ces mots la

Répondre à imed eddine

20

abir, le 5 mai 2009 à 22:52:33

Bsr je veux un code en RGUI pour lire et ecrire un fuchier xml
et a pour but de faire la classification des images
donc on a besoin de lire un fichier xml avant classification et a d'ecrire ensuite un autre fichier aprés classification
merci

Répondre à abir