IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Ecrire dans un fichier texte


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut Ecrire dans un fichier texte
    Bonjour,

    J'essaye d'écrire des valeurs (int) dans un fichier texte.
    Je toutes les images se trouvant dans un dossier et je compte les pixels noirs de cette image.
    Et je veux afficher dans mon fichier texte le nombre de pixels pour chaque image.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class DetectionEtFichierTexte {
     
     
        public static void displayImage(File file, BufferedImage img) {
     
            int cptnoir = 0;
            int height = img.getHeight();
            int width = img.getWidth();
     
     
     
                    for (int x = 0; x < width; x++)
                    for (int y = 0; y < height; y++) {
     
                        int p = img.getRGB(x, y);
                        int r = (p>>16)&0xff;
     
                        if(r == 0){
                                cptnoir++;
                            }
     
     
            }
     
            System.out.println(" "+ file +  " " + cptnoir+ " ");
     
           //écrire les résultats dans un fichier texte
     
    try {  
     
                File filetxt = new File("chemin\\Classification.txt");
     
            // if file doesnt exists, then create it
                if (!filetxt.exists()) {
                filetxt.createNewFile();
                    		}
     
     
                FileWriter fw = new FileWriter(filetxt.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(file + " = " + cptnoir + "");
     
                bw.close();
     
                System.out.println("Done");
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
        }
     
     public static void main(String[] args) {
     
     
            File path = new File("chemin");
            for (File file : path.listFiles()) {
                try {
                    BufferedImage img = ImageIO.read(file);
                    if (img != null)
                        displayImage(file, img);
                } catch (IOException e) {
                    continue;
                }
             }   
     
        }
    Donc j'ai bien un fichier texte qui s'affiche mais à l'intérieur je n'ai que la dernière valeur de mon compteur "cptnoir".
    Pourtant dans ma console j'ai bien Les différentes valeurs affichées grace à mon System.out.println

    Avez-vous une idée merci ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut
    Ah j'ai trouvé, FileWriter peut prendre en compte un boolean en le mettant à "true" le code s'écrit ligne après ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileWriter fw = new FileWriter(filetxt.getAbsoluteFile(),true);
    J'ai une autre question :

    Je sais lire tous les fichiers présent dans un dossier. Comment faire pour lire les fichiers dans plusieurs dossiers.
    Exemple j'ai 3 dossiers :
    Dossier 1 -> fichier 1 fichier2
    Dossier 2 -> fichier 1 fichier2
    Dossier 3 -> fichier 1 fichier 2

    Je veux pour lire les fichiers du dossier 1 puis du 2 puis du 3

    merci

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si tu sais lire les fichiers d'un dossier, tu sais forcément lire les fichiers de plusieurs dossiers... il suffit de refaire ce que tu fais sur un dossier pour les autres... c'est un peu le principe de base la répétition en programmation... Par exemple, en mettant le code de traitement d'un dossier en méthode, avec le dossier en paramètre, que tu peux ainsi appeler avec plusieurs valeurs différentes de paramètres.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut
    Alors je ne vois pas trop comment écrire la méthode.
    Je vous montre la totalité de mon code.

    Dans mon main j'indique le nom du répertoire à explorer et je fais une boucle pour explorer tous les fichiers. (mes fichiers sont des images)
    J'appel également la méthode "displayImage()"

    Dans cette méthode je compte le pixels noirs présents dans l'image et j'affiche dans un fichier texte ce compteur pour chaque image.

    Comment je dois m'y prendre pour créer une méthode qui rappel ma méthode pour chaque dossiers ?

    Je suis un peu perdu

    Merci

  5. #5
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    salut,

    tu remontes d'un niveau dans ton arborescence et pour chaque item du dossier parent (identifié par un objet File) tu appelles la méthode isDirectory(); Si ça vaut true tu lis son contenu et pour chaque élément tu appelles ton fonction displayImage();

    Tu peux aussi externaliser dans un fichier properties les paths des différents dossiers et dans ton main tu boucles sur celles-ci...

    bon courage
    ++

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu parcours les fichiers du dossier 1 comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    File path = new File("chemin");
            for (File file : path.listFiles()) {
                try {
                    BufferedImage img = ImageIO.read(file);
                    if (img != null)
                        displayImage(file, img);
                } catch (IOException e) {
                    continue;
                }
             }
    et bien si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    String[] chemins = {"chemin1", "chemin2","chemin3"};
    for( String chemin : chemins ) {
            File path = new File( chemin);
            for (File file : path.listFiles()) {
                try {
                    BufferedImage img = ImageIO.read(file);
                    if (img != null)
                        displayImage(file, img);
                } catch (IOException e) {
                    continue;
                }
             }  
    }
    ça parcourt les trois dossiers chemin1, chemin2, chemin3... c'est bien ce que tu cherches à faire, non ?

    Sinon, tu peux également parcourir une arborescence, comme te l'as indiqué @freddou17 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public static void main(String[] args) {
    /*...*/
    displayImages(new File( name ));
    /*...*/
    }
    private static void displayImages(File file) {
             if ( file.isDirectory() ) {
                  for (File subfile : file.listFiles()) {
                      displayImages(subFile);
                  }
             }
             else {
                   try {
                      BufferedImage img = ImageIO.read(file);
                      if (img != null)
                        displayImage(file, img);
                    } catch (IOException e) {
                         continue;
                    }
             }
    }

    Au passage, au lieu de ton continue, et de ne pas afficher les erreurs (qui peuvent être utiles le cas échéant), ce serait plus propre de faire quelque chose commen çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	 try {
    			if (isImage(file)) {
    				BufferedImage img = ImageIO.read(file);
    				if (img != null) {
    					displayImage(file, img);
    				}
    			} 
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static boolean isImage(File file) throws IOException {
    	int pos = file.getName().lastIndexOf('.');
    	if ( pos<0 ) {
    		return false;
    	}
    	else { 
    		return ImageIO.getImageReadersBySuffix(file.getName().substring(pos+1)).hasNext();
    	}
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire/ecrire dans un fichier texte
    Par mello dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 13/06/2006, 12h35
  2. [VB.net]ecrire dans un fichier text
    Par grand_prophete dans le forum Windows Forms
    Réponses: 12
    Dernier message: 04/05/2006, 16h37
  3. Réponses: 6
    Dernier message: 17/12/2005, 19h27
  4. [VB.NET] Ecrire dans un fichier texte...
    Par robert.michel9 dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/12/2005, 14h35
  5. Ecrire dans un fichier text en MFC
    Par soufienne dans le forum MFC
    Réponses: 6
    Dernier message: 05/10/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo