Code qui ajoute "NULL" qd lecture fichier txt

Résolu
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - Modifié le 8 mai 2018 à 23:34
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - 5 juin 2018 à 14:25
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);}
}

5 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
10 mai 2018 à 22:32
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);
    }
}
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
16 mai 2018 à 17:53
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());
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
16 mai 2018 à 19:46
"é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.
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
2 juin 2018 à 23:03
oui je suis en java 6. est ce possible de convertir tout mon code en java 8 ? Si je dois tout recommencer ....
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
3 juin 2018 à 00:08
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 !
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
3 juin 2018 à 23:58
en fait le code est reconnu en java 9. Ouf !
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127 > azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
4 juin 2018 à 08:34
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é").
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
4 juin 2018 à 01:21
super ton code KX. Hyperpuissant avec 6 lignes !
hyper merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
5 juin 2018 à 14:25
ok. Je suis en 1.8. Merci
0
Rejoignez-nous