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

Java Discussion :

Exception sun.io.MalformedInputException lors de la lecture du contenu d'un fichier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut Exception sun.io.MalformedInputException lors de la lecture du contenu d'un fichier
    Hello les gens,
    Mon besoin est de lire le contenu d'un fichier.
    J'ai les deux méthode suivantes pour lire le contenu d'un fichier ligne par ligne (je ne peux pas utiliser un objet Scanner apparu depuis java 5):
    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
    public static StringBuffer readAFile(String filePath) {
    		StringBuffer result = new StringBuffer();
     
    		try {
    			//		   Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
    			//		   try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
    			//		   est correctement instancié (évite les NullPointerException)
    			BufferedReader buff = new BufferedReader(new FileReader(filePath));
     
    			try {
    				String line;
    				//		   Lecture du fichier ligne par ligne. Cette boucle se termine
    				//		   quand la méthode retourne la valeur null.
    				while ((line = buff.readLine()) != null) {
    					//System.out.println(line);
    					result = result.append(line);
    				}
    			} finally {
    				//		   dans tous les cas, on ferme nos flux
    				buff.close();
    			}
    		} catch (IOException ioe) {
    			//		   erreur de fermeture des flux
    			System.out.println(
    				"Erreur sur com.projet.util.FileOperation.readAFile(String) -->"
    					+ ioe.toString());
    		}
    		return result;
    	}
     
    	public static String readFile(String theFileName) {
    		InputStreamReader flog = null;
    		LineNumberReader llog = null;
    		String myLine = null;
    		String myConcatLines = "";
    		try {
    			flog = new InputStreamReader(new FileInputStream(theFileName));
    			llog = new LineNumberReader(flog);
    			while ((myLine = llog.readLine()) != null) {
    				// --- Ajout de la ligne au contenu
    				myConcatLines += myLine;
    			}
    		} catch (Exception e) {
    			// --- Gestion erreur lecture du fichier (fichier non existant, illisible, etc.)
    			System.out.println(
    				"Erreur sur com.projet.util.FileOperation.readFile(String) -->"
    					+ e.toString());
    		}
    		return myConcatLines;
    	}
    Toutes les deux marchent sur une machine windows faisant tourner WAS 5.1 en JDK 1.4 (environnement de dev)
    Ce code lève une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sun.io.MalformedInputException
    lorsqu'il tourne sur la machine de prod sous unix avec WAS 6 et JDK 6
    Je ne peux pas déboguer sur la machine de prod pour savoir à quel niveau ça bug malheureusement.
    Que signifie cette exception ?

    Merci pour toutes vos contributions.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Salut,



    Il est plutôt conseillé en général de monter son environnement de dev avec les mêmes versions de JDK et du serveur d'application qu'à la cible (ie la Production). Ca évite d'avoir des mauvaises surprises lors des mises en Prod... Mais tu n'as peut-être pas le choix ?

    Pourrais-tu nous afficher la stackTrace complète de ta MalformedInputException ainsi que nous préciser de quel Unix il s'agit (HP-UX, AIX, Solaris, *BSD,...)

    A+

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedReader buff = new BufferedReader(new FileReader(filePath));
    Il y a un erreur là. A chaque fois que vous construisez un Reader, précisez un encodage explicite, sinon, l'encodage utilisé dépendra de la configuration de l'environnement hote, ce qui, dans 99% des cas, n'est pas le comportement désiré.

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    Mais tu n'as peut-être pas le choix
    exacte.
    Pourrais-tu nous afficher lastackTrace complète de ta MalformedInputException ainsi que nous préciser de quel Unix il s'agit (HP-UX, AIX, Solaris, *BSD,...)
    pour la stack demain à la première heure. Pour la distribution c'est un AIX.
    Il y a un erreur là. A chaque fois que vous construisez un Reader, précisez un encodage explicite
    comment expliquer le fait qu'il y ait le même soucis sur la deuxième méthode?
    P.s:c'est un code issu de la FAQ qu'il faudrait corriger éventuellement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Salut,

    tchize_ a raison, il faut définir l'encodage utilisé par le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Charset charset = Charset.forName("ISO-8859-1"); // par exemple
    BufferedReader buff = null;
    InputStreamReader isr = null;
    	try {
    		isr = new InputStreamReader(new FileInputStream(filePath), charset);
    		buff = new BufferedReader(isr);
    sinon tu va dépendre des variables locales LC_ALL ou LANG du serveur. (fr_FR.UTF8 par exemple)

    comment expliquer le fait qu'il y ait le même soucis sur la deuxième méthode?
    Sur la deuxième méthode c'est pareil, il faut rajouter le charset utilisé dans ton FileInputStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Charset charset = Charset.forName("ISO-8859-1"); // par exemple
    flog = new InputStreamReader(new FileInputStream(theFileName), charset);
    A+

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Il n'y a que moi que ca choque de voir des System.out pour une application en production ? Encore pire la stacktrace est jetée à la poubelle, je voudrais pas traiter les points supports de cette application ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/07/2012, 10h11
  2. Réponses: 3
    Dernier message: 15/02/2010, 09h56
  3. la lecture du contenu d'un fichier
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/01/2009, 14h11
  4. Lecture du contenu d'un fichier
    Par nawal_ensias dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 13h23
  5. [VB5] |Lecture du contenu d'un fichier .TXRT|
    Par jlb59 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/06/2006, 17h16

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