Decorateur problème UpperCase

Decorateur problème UpperCase - Java - Programmation

Marsh Posté le 07-01-2014 à 22:52:13    

Bonjour,
 
Je cherche à faire un petit bout de programme permettant de transformer en majuscules un fichier en entrée. Pour ce faire, j'utilise le pattern décorateur comme suit :  
 

Code :
  1. public class UpperCaseInputStream  extends FilterInputStream{
  2.    protected UpperCaseInputStream(InputStream in) {
  3.       super(in);
  4.    }
  5.  
  6.   public int read() throws IOException {
  7.        int c = super.read();
  8.          
  9.        return (c != -1 ? c : Character.toUpperCase((char)c));
  10.      
  11.  
  12.    }
  13.    public int read(byte[] b, int offset, int len) throws IOException {
  14.        int result = super.read(b, offset, len);
  15.        for (int i = offset; i < offset+result; i++) {
  16.            b[i] = (byte)Character.toUpperCase((char)b[i]);
  17.        }
  18.        return result;
  19.     }
  20. }


 
Et en test :  

Code :
  1. public void testUpper () throws Exception {
  2.  
  3.      InputStream is = new UpperCaseInputStream(new BufferedInputStream(new FileInputStream(new File("README.TXT" )))); //le fichier contient une petite phrase toute bête en minuscules
  4.      int c = is.read();
  5.      while (c != -1) {
  6.         System.out.println((char)c);
  7.         }
  8.       is.close();
  9.    
  10.     }


Et à l'affichage sur la console, j'obtiens une boucle infinie me sortant des tirets " - ", sans fin. Si quelqu'un sait où est mon erreur, merci pour l'aide apportée

Reply

Marsh Posté le 07-01-2014 à 22:52:13   

Reply

Marsh Posté le 08-01-2014 à 11:06:26    

trouvé en forçant le path (au lieu de mettre README.TXT mettre "monpath/README.TXT" )
En revanche, la conversion ne se fait pas. Pourquoi ?

Reply

Marsh Posté le 08-01-2014 à 11:52:24    

Code :
  1. public int read() throws IOException {
  2.        int c = super.read();
  3.        
  4.        return (c != -1 ? c : Character.toUpperCase((char)c));
  5.    
  6.    }

 

Dans cette fonction, tu renvois "Character.ToUpperCase( (char)c )" seulement si c == -1.

 

(opérateur ternaire : condition ? valeur_si_vrai : valeur_si_faux)


Message édité par Terminapor le 08-01-2014 à 11:52:34

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 08-01-2014 à 14:13:54    

En effet, Merci. En faisant plus simple qu'en ternaire, ça va tout de suite beaucoup mieux.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed