fichier.il existe() pour retourner false si le fichier n'existe pas

Dans une application Android, je suis en train de travailler sur, l'utilisateur doit être en mesure de créer un nouveau fichier CSV sur la carte SD, nommés à l'aide de texte d'entrée dans un EditText.

Le problème est que, après l'instanciation du Fichier à l'aide du répertoire et nom de fichier, fichier.exists() retourne faux, même lorsque le fichier existe bel et bien à cet endroit. J'ai parcouru la carte SD à l'aide d'un fichier Android navigateur et via l'Explorateur Windows et le fichier n'existe pas.

Est-ce la bonne façon de vérifier si le fichier existe déjà, et si oui, que suis-je en manquant de sorte qu'elle retourne vrai quand il existe?

String csvname = edittext.getText().toString() + ".csv";
File sdCard = Environment.getExternalStorageDirectory(); //path returns "/mnt/sdcard"
File dir = new File (sdCard.getAbsolutePath() + "/Android/data/" + getPackageName() + "/files/"); //path returns "/mnt/sdcard/Android/data/com.phx.license/files"
dir.mkdirs();
File file = new File(dir, csvname); //path returns "/mnt/sdcard/Android/data/com.phx.license/files/Test.csv"

if(!file.exists()) //WHY DOES IT SAY IT DOESN'T EXIST WHEN IT DOES?
{
    ...
}
  • Le répertoire existe pas?
  • getPackageName() renvoie la même chose à chaque fois?
  • Oui, le répertoire existe
  • Tahir Akhtar - getPackageName() renvoie la même chose à chaque fois, car il est toujours appelé à partir de la même package
  • Ma suggestion est de l'exécuter dans le débogueur (ou de sortie de la console) et de voir exactement ce que chacune de ces méthodes renvoie.
  • J'utilise Eclipse et ont débogué le diable hors de cette chose. En regardant le fichier.exists(), elle renvoie toujours faux, comme le fait fichier.getAbsoluteFile().exists().
  • peut-être que vous n'avez pas les autorisations de lecture sur le fichier? Java est SecurityManager est impliqué lorsque vous appelez .exists() et il vérifie les autorisations de lecture. Normalement si le SecurityManager est activé, alors dans ce cas il y aura une exception, pas une rémunération normale, mais je ne sais pas comment cela fonctionne sur Android
  • Vous devriez vraiment utiliser File.separatorChar au lieu de coder en dur avec une barre oblique.
  • J'ai ajouté <uses-permission android:name="android.la permission.WRITE_EXTERNAL_STORAGE" /> le fichier de manifeste. Pour autant que je sais, c'est tout ce qui est requis pour l'application à accéder au système de fichiers.
  • merci pour la suggestion, je vais donner un coup de feu
  • ce n'est probablement pas le problème, mais c'est une bonne pratique.
  • Étant que les données externes répertoire, sachez que chaque fois que vous re-installer l'apk avec apt/Eclipse, il sera effacé si en cours d'exécution sur l'API >= 8. En fait si, j'ai une 2.2 appareil (LG Optimus one) et il ne se passe pas là, mais il n'sur l'émulateur.
  • Vous avez raison, je devrais écrire le fichier à un non-spécifique à l'application de l'emplacement.
  • pourquoi ne pas vous essayez d'imprimer le chemin d'accès au fichier par l'aide de la Chaîne.valueOf(fichier) et de voir si le chemin d'accès du fichier est correct. Il se pourrait que le chemin d'accès au fichier c'est être faite par la concaténation de tous les chemins qui peut être erroné. fichier.exists() ne devrait pas être de retour un mauvais résultat si quelque chose doit être mal.
  • Dans la bad, la question cd /sdcard; touch testfile puis remplacer File dir = new File (sdCard.getAbsolutePath()); et String csvname = "testfile"; . Recompiler et de l'exécuter. file.exists() doit retourner vrai maintenant. Post debug résultats.
  • Sur le Samsung galaxy S, j'ai travaillé, Environment.getExternalStorageDirectory(); retourne le chemin d'accès à la mémoire flash interne /mnt/sdcard. La vraie carte sd externe a été monté sur mnt/sdcard/sd. Peut-être cela le problème?

InformationsquelleAutor Gady | 2011-03-25