47 votes

Tester si le fichier existe

J'essaie d'ouvrir un fichier dans Android comme ceci :

  try
   {
      FileInputStream fIn = context.openFileInput(FILE);
      DataInputStream in = new DataInputStream(fIn);
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
      if(in!=null)
          in.close();
   }
   catch(Exception e)
   {  }

Mais si le fichier n'existe pas, une exception de fichier non trouvé est levée. J'aimerais savoir comment tester si le fichier existe avant de tenter de l'ouvrir.

161voto

lencinhaus Points 2499

Je pense que la meilleure façon de savoir si un fichier existe, sans essayer de l'ouvrir, est la suivante :

File file = getContext().getFileStreamPath(FILE_NAME);
if(file.exists()) ...

J'espère que cela vous aidera, au revoir !

26voto

rompetroll Points 2163

La documentation indique que Context.openFileInput renvoie soit un inputStream (fichier trouvé), soit une FileNotFoundException (non trouvé).

http://developer.Android.com/reference/Android/content/Context.html#openFileInput(java.lang.String)

Il semble donc que l'exception soit votre "test".

Vous pouvez également essayer d'utiliser le standard

java.io.File file = new java.io.File(PATHTOYOURCONTEXT , FILE);
if (file.exists()) {
    FileInputStream fIn = new FileInputStream(file);
}

Mais ce n'est pas recommandé. Context.openFileInput() et Context.openFileOutput() s'assurent que vous restez dans le contexte de stockage de votre application sur l'appareil, et que tous vos fichiers sont supprimés lorsque votre application est désinstallée. supprimés lorsque votre application est désinstallée.

5voto

molbalga Points 51

Avec la norme java.io.File Voici la fonction que j'ai créée et qui fonctionne correctement :

private static final String APP_SD_PATH = "/Android/data/com.pkg.myPackage";
...
public boolean fileExistsInSD(String sFileName){
    String sFolder = Environment.getExternalStorageDirectory().toString() + 
            APP_SD_PATH + "/Myfolder";
    String sFile=sFolder+"/"+sFileName;
    java.io.File file = new java.io.File(sFile);
    return file.exists();
}

2voto

Prashast Points 4064

Pourquoi ne pas simplement attraper l'exception FileNotFound et considérer que le fichier n'est pas présent.

0voto

tjb Points 2869

Si vous voulez ouvrir un fichier dans n'importe quel cas (c.-à-d. s'il n'existe pas, en créer un nouveau, s'il existe, l'ajouter à l'ancien), vous pouvez utiliser ceci, sans aucun test nécessaire :

public static void write_custom_log(String message){
        File root = Environment.getExternalStorageDirectory();
        try{
            BufferedWriter fw = new BufferedWriter(new FileWriter(new File("/mnt/sdcard/tjb_tests/tjb_log_file.txt"),true));

            if (root.canWrite()){
                fw.write(message);
                fw.close();
                }
            } catch (IOException e) {
                Log.e("One", "Could not write file " + e.getMessage());
            }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X