2010-10-11 24 views
0

J'essaie d'exécuter ce morceau de code dans ma méthode onCreate en tant que test initial dans l'écriture de données privées pour mon application à utiliser. Ce code est tout droit sorti du guide de développement SDK Android situé hereErreur: FileOutputStream n'est peut-être pas initialisé

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

Cependant, ce code donne-moi des erreurs pour les 3 lignes de code en bas. L'erreur est une exception non gérée. La solution rapide est proposée faire à ce qui suit:

String FILENAME = "hello_file"; 
    String string = "hello world!"; 

    FileOutputStream fos; 
    try { 
     fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fos.write(string.getBytes()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fos.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Mais après avoir fait que je reçois une erreur pour les deux lignes inférieures qui stipule que fos ne peuvent pas être initialisés. Comment puis-je corriger ce code?

Répondre

2

Remplacer

FileOutputStream fos; 

avec

FileOutputStream fos = null; 
+0

Je vois, cela a fonctionné. Peut-être qu'il est temps pour moi de commencer enfin à apprendre sur les exceptions en Java :) –

+0

dans ce cas ... où vérifier le fichier créé ...? –

1

Oui, le problème est que si vous obtenez un FileNotFoundException vous essayez de simplement imprimer l'exception et continuer, mais dans ce cas, les fos Une valeur n'aurait jamais été affectée à une variable, car l'appel "openFileOutput" n'aurait pas été terminé. C'est bien, parce que dans le cas où vous n'étiez pas en mesure d'ouvrir un fichier, vous ne voulez pas continuer à essayer d'écrire dans le fichier que vous n'avez pas ouvert.

Puisqu'un FileNotFoundException EST un IOException, vous pouvez simplifier tout cela comme:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

try { 
    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    fos.write(string.getBytes()); 
    fos.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Dans ce cas, la première chose qui soulève une exception provoque la trace de la pile pour obtenir imprimé, et vous sauter toute modification ultérieure opérations dans le reste du bloc try {}. Le problème avec la réponse de ciment est que, bien qu'il obtienne par l'erreur de compilateur, si le premier bloc lève jamais l'exception, le deuxième bloc vous donnera une exception de NullPointerException.

+0

Désolé de réactiver ce fil après une longue période. J'ai lu un fichier du dossier 'asset', puis j'ai écrit ce fichier en utilisant' FileOutputStream'. Ma question est ce que le chemin du fichier sauvegardé par 'FileOutputStream'. –