2011-10-12 6 views
13

J'essayais d'ouvrir un fichier à lire.Android ouvrir le fichier

Lorsque vous utilisez: Scanner input = new Scanner(filename); le fichier n'a pas pu être trouvé

mais quand je:

InputStream in = openFileInput(filename); 
Scanner input = new Scanner(in); 

cela a fonctionné. Pourquoi la première ligne de code était-elle incorrecte?

Répondre

10

Les fichiers sont stockés sur le périphérique dans un emplacement spécifique, dépendant de l'application, ce que je suppose que openFileInput ajoute au début du nom de fichier. Le résultat final (emplacement + nom de fichier) est construit comme suit:

/data/data/<application-package>/files/<file-name> 

Notez également que la documentation indique que le paramètre openFileInputcannot contain path separators. Pour éviter de coder en dur le chemin de localisation, qui peut en principe être différent d'un périphérique à l'autre, vous pouvez obtenir un objet File pointant vers le répertoire de stockage en appelant getFilesDir, et l'utiliser pour lire le fichier que vous voulez à. Par exemple:

File filesDir = getFilesDir(); 
Scanner input = new Scanner(new File(filesDir, filename)); 

Notez que la construction d'un Scanner en passant un String comme paramètre entraînerait le scanner de travail sur le contenu de la chaîne, à savoir l'interpréter comme le contenu réel de scanner au lieu comme le nom de un fichier à ouvrir.

+0

merci !! J'ai utilisé le mauvais constructeur au début: P .. alors j'ai essayé d'utiliser Scanner sc = new Scanner (nouveau fichier (nom de fichier)); mais cela n'a pas fonctionné ... File filesDir = getFilesDir(); Entrée scanner = nouveau Scanner (nouveau fichier (fichierRep, nom de fichier)); cela fonctionne très bien: D – zSt

-4
Scanner sc = new Scanner(new File(filename)); 
+10

pourriez-vous s'il vous plaît fournir plus d'informations? Lancer le code autour n'aide personne ... – WarrenFaith

9

Cela m'a rendu fou il y a quelques minutes. J'ai oublié d'ajouter cette ligne à manifester:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

je me attends une autorisation refusé un message. Mais juste obtenu un fichier pas trouvé ...

Dans votre cas:openFileInput ouvre un fichier dans votre répertoire de données de l'application privée (/data/data/your.package/filename). Cela n'échoue jamais. Mais le scanner essaie de l'ouvrir sur le chemin racine. Donc, quand vous voulez lire un fichier de la carte SD que vous utiliseriez Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename.