Code qui ajoute "NULL" qd lecture fichier txt [Résolu]

Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
-
Bonjour,

Lors de l'execution du programme, je lis un fichier text qui contient un chemin d'accès à un dossier. Je stocke ce chemin d'accès (
texte
) dans un String
Fenetre1.CheminDossierBou
. Malheureusement ce chemin d'accès ne peut être exploité car il y a systématiquement à la fin le mot "NULL" ....
/Users/moi/eclipse-workspace/JAVA/DOSSIERS BOU/null
???!!

Voici le code ci dessous :
http://codes-sources.commentcamarche.net/source/15384-ecrire-lire-un-string-dans-un-fichier-avec-des-bufferedwriter-et-bufferedreader


public  class Lireetecrire 
{
//fonction ecrire void = la fonction ne retourne rien
//mais prend comme argument la chaine de charactere(Sring) texte qui correspond a texteaecrire
public static void ecrire(String texte)
{
//on va chercher le chemin et le nom du fichier et on me tout ca dans un String
String adressedufichier = System.getProperty("user.dir") + "\\cheminDossier.txt";

// je supprime le fichier dans un premier temps pour éviter qu'il contienne plusieurs chemins
File fichier = new File(adressedufichier);
fichier.delete();
//on me try si jamais il y a une exception \\
try
{
//BufferedWriter a besoin d un FileWriter,
//les 2 vont ensemble, on donne comme argument le nom du fichier
//true signifie qu on ajoute dans le fichier (append), on ne marque pas par dessus
FileWriter fw = new FileWriter(adressedufichier, true);

// le BufferedWriter output auquel on donne comme argument le FileWriter fw cree juste au dessus
BufferedWriter output = new BufferedWriter(fw);

//on marque dans le fichier ou plutot dans le BufferedWriter qui sert comme un tampon(stream)
output.write(texte);
//on peut utiliser plusieurs fois methode write

output.flush();
//ensuite flush envoie dans le fichier, ne pas oublier cette methode pour le BufferedWriter

output.close();
//et on le ferme

}
catch(IOException ioe){System.out.println("erreur : " + ioe );}
//on "catch" l exception ici si il y en a une, et on l affiche sur la console

}

//je vais moins commenter cette partie c'est presque la meme chose
public static void lire()
{
try
{
String adressedufichier = System.getProperty("user.dir") + "\\cheminDossier.txt";
FileReader fr = new FileReader(adressedufichier);
BufferedReader br = new BufferedReader(fr);
String texte = "";
int a = 0;
while(a<2) //petite boucle 2 fois
{
texte = texte + br.readLine() + "\n";
a++;
}
br.close();

//readLine pour lire une ligne
//note: si il n y a rien, la fonction retournera la valeur null

Fenetre1.CheminDossierBou = texte ;

System.out.println(texte);
//on affiche le texte

}
catch(IOException ioe){System.out.println("erreur : " + ioe);}
}
Afficher la suite 

Votre réponse

5 réponses

Messages postés
15868
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 décembre 2018
0
Merci
Bonjour,

Plusieurs commentaires sur cette source mentionnent des imperfections, notamment celui-ci sur le null :
https://codes-sources.commentcamarche.net/forum/affich-7015384#19

Cependant, je ne vois pas l'intérêt de discuter d'un code de 2002...
Voici comment faire avec une version récente de Java :

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;

public class Test {

    public static void main(String[] args) throws IOException {
        String fileName = "/Users/moi/test.txt";
        writeOneLine(fileName, "/Users/moi/eclipse-workspace/JAVA/DOSSIERS BOU/");
        String line = readOneLine(fileName);
        System.out.println(line); // /Users/moi/eclipse-workspace/JAVA/DOSSIERS BOU/
    }

    public static void writeOneLine(String fileName, String text) throws IOException {
        Files.write(Paths.get(fileName), Arrays.asList(text));
    }

    public static String readOneLine(String fileName) throws IOException {
        return Files.readAllLines(Paths.get(fileName)).get(0);
    }
}
Commenter la réponse de KX
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
0
Merci
Bonjour, Merci pour la réponse. Mais j'ai eu du mal à utiliser le code. éclipse me demande une méthode pour le "Path" et ne reconnais pas import nio.
Du coup j'ai trouvé un autre code : https://www.ukonline.be/programmation/java/tutoriel/chapitre12/page4.php


double[] data = {15.9, 21.2, 18.4, 25.4, 31.1};
File f = new File ("temperatures");

try
{
PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter (f)));

for (double d : data)
{
pw.println (d);
}

pw.close();
}
catch (IOException exception)
{
System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
}
KX
Messages postés
15868
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 décembre 2018
-
"éclipse me demande une méthode pour le "Path" et ne reconnais pas import nio."
Tu dois utiliser une vieille version de Java pour avoir ce comportement...
Les classes java.nio.file existent depuis Java 7 (sorti en 2011).

Quant à mon code il est écrit en Java 8 et à un petit détail près il pourrait fonctionner en Java 7.
Mais si tu es sur une version Java 6 ou moins, il faut absolument te mettre à jour.
Commenter la réponse de azerty_qwerty
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
0
Merci
oui je suis en java 6. est ce possible de convertir tout mon code en java 8 ? Si je dois tout recommencer ....
KX
Messages postés
15868
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 décembre 2018
-
Dans la plupart des cas, un code dans une version de Java fonctionnera dans une version de Java supérieure.
Il y a des exceptions, mais elle ne concerneront probablement pas ton code ou seront faciles à modifier.

Incompatibilities between Java SE 7 and Java SE 6
Incompatibilities between Java SE 8 and Java SE 7

L'intérêt de passer à une version plus récente est de pouvoir utiliser toutes les nouvelles fonctionnalités qui vont avec, notamment les packages java.nio dont je me suis servi.

NB. Java 8 est la dernière version "recommandée" sur java.com et c'est donc celle que les utilisateurs devraient avoir sur leur système (avec les mises à jour automatiques notamment).
Donc si ton code ne fonctionne que en Java 6 (mais pas en Java 8) alors tes utilisateurs ne pourront pas se servir...

Pour information, la dernière version c'est Java 10 (Java 11 sort en septembre). Donc Java 6... aux oubliettes !
azerty_qwerty
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
-
en fait le code est reconnu en java 9. Ouf !
KX
Messages postés
15868
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 décembre 2018
> azerty_qwerty
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
-
Pourquoi Java 9 ? C'était une version de transition dont le support n'est déjà plus assuré...
Soit tu restes sur du Java 8 (version qu'ont la majorité des utilisateurs), soit tu prends la dernière version, Java 10.
Sachant que Java 10 est également une version de transition, comme Java 9.
Seul Java 11 bénéficiera d'un Support à Long Terme (jusqu'en 2023), les utilisateurs finaux seront donc amenés à mettre à jour leur version de Java en passant de Java 8 à Java 11 (Java 9 et 10 n'auront "jamais existé").
Commenter la réponse de azerty_qwerty
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
0
Merci
super ton code KX. Hyperpuissant avec 6 lignes !
hyper merci.
Commenter la réponse de azerty_qwerty
Messages postés
38
Date d'inscription
vendredi 23 mars 2018
Dernière intervention
3 décembre 2018
0
Merci
ok. Je suis en 1.8. Merci
Commenter la réponse de azerty_qwerty

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.