2010-02-17 15 views
3

Pourquoi le code suivant renvoie-t-il toujours la valeur true même lorsqu'une exception est levée?Pourquoi la déclaration de retour Java à l'intérieur du bloc catch ne fonctionne-t-elle pas?

public boolean write (ArrayList<String> inputText, String locationToSave){ 

    try {   
     File fileDir = new File(locationToSave); 
     Writer out = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(fileDir), "utf8")); 

     int index = 0; 
     int size = inputText.size(); 
     while (index < size) { 
        out.append(inputText.get(index)); 
        out.append("\n"); 
        index++; 
        } 
     out.flush(); 
     out.close(); 

     return true; 

    } catch (UnsupportedEncodingException e) { 
     System.out.println("UnsupportedEncodingException is : \n" + e.getMessage()); 
     return false; 
    } catch (IOException e) { 
     System.out.println("IOException is : \n" + e.getMessage()); 
     return false; 
    } catch (Exception e) { 
     System.out.println("Exception is : \n" + e.getMessage()); 
     return false; 
    } 
} 

Édition 01

Voici le code que je utilise pour tester le code précédent:

if (fileReader.write(fileReader.read(selectedFile), selectedSaveLocation)) { 
     System.out.println("The file : " + selectedFile + " as been successfully" 
     + "converted to : " + selectedSaveLocation); 
    } else { 
     System.out.println("The file : " + selectedFile + " failed to convert!"); 
    } 
+1

comment confirmez-vous qu'il est lancé? – Bozho

+2

il renvoie faux ici quand j'ai une erreur, il doit y avoir un autre problème lors de l'appel de ce code –

+0

@Bozho: bien je vois l'avertissement d'exception dans le terminal. –

Répondre

7

Je ne pense pas que vous voyez ce que vous pensez vois. En d'autres termes, je suis à peu près sûr que cela renvoie false, et que vous devriez vérifier le code appelant.

Par exemple, je collais votre code dans une nouvelle application de la console Java, fait statique, et écrit une méthode principale avec ce corps:

System.out.println(write(null, null)); 

La sortie était:

Exception is : 
null 
false 
3

Il ne retourne pas toujours vrai. J'ai créé un testproject, causé une IOException ... et je me trompe! Il doit y avoir une erreur dans votre raisonnement.

1

Si vous constatez une exception dans la console et que la valeur de retour est toujours vraie, vérifiez le type d'exception. Puisque vous attrapez Exception, je suppose que cela pourrait être un Throwable non vérifié qui est déclenché. Vous ne définissez jamais le drapeau sur false dans ce cas.

je pourrais l'écrire ainsi:

public boolean write (Collection<String> inputText, String locationToSave) 
{ 

    boolean isSuccessful = false; 
    Writer out; 

    try 
    { 

     File fileDir = new File(locationToSave); 
     out = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(fileDir), "utf8")); 

     for (String line : inputText) 
     { 
      out.append(inputText.get(index)); 
      out.append("\n"); 
     } 

     isSuccessful = true; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     cleanup(out); 
    }  

    return isSuccessful; 
} 

private static void cleanup(Writer out) 
{ 
    try 
    { 
     if (out != null) 
     { 
      out.flush(); 
      out.close(); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

J'aime votre logique. Cependant, je ne sais pas pourquoi quand je l'appelle, je reçois le "vrai" –

+0

@MAK: Parce que votre code ne lance jamais une exception – mikek

+0

Il le fait, lancer une exception ... et je le vois dans le système –

1

Comme tout le monde a déjà dit, l'exception est pas celui que vous pensez qu'il est. Je suppose que la méthode

fileReader.read(selectedFile) 

logs l'exception que vous voyez dans vos journaux ...

Montrez-nous le code de cette méthode ... Et nous montrent l'exception ...