web-dev-qa-db-fra.com

Tester si le fichier existe

J'essaie d'ouvrir un fichier en 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 introuvable est levée. J'aimerais savoir comment tester si le fichier existe avant de tenter de l'ouvrir.

47
rantravee

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

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

J'espère que ça aide, au revoir!

161
lencinhaus

La documentation indique que Context.openFileInput retourne un inputStream (fichier trouvé) ou lève une FileNotFoundException (introuvable)

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 la norme

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 () assurez-vous de rester dans le contexte de stockage de vos applications sur l'appareil, et que tous vos fichiers soient supprimés lorsque votre application est désinstallée.

26
rompetroll

Avec la norme Java.io.File c'est 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();
}
5
molbalga

pourquoi ne pas simplement attraper l'exception FileNotFound et prendre cela comme le fichier absent.

2
Prashast

Si vous voulez vous assurer qu'un fichier existe (c'est-à-dire s'il n'existe pas, créez-en un nouveau, s'il ne le fait pas, alors ne l'effacez pas), utilisez File.createNewFile:

https://docs.Oracle.com/javase/7/docs/api/Java/io/File.html#createNewFile ()

par exemple.

{
        String pathName = <file path name>
        File file = new File (pathName);
        Uri pathURI = Uri.fromFile (file);
        boolean created;

        String mIOException = "";
        String mSecException = "";

        try
        {
            created = file.createNewFile();

            if (created)
            {
                ctxt.sendBroadcast (new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, pathURI));
            }
        }
        catch (IOException ioex)
        {
            mIOException = ioex.getMessage();
        }
        catch (SecurityException sex)
        {
            mSecException = sex.getMessage();
        }

}
1
Den-Jason

Si vous souhaitez ouvrir un fichier dans tous les cas (c'est-à-dire s'il n'existe pas, créez-en un nouveau, s'il s'ajoute à l'ancien), vous pouvez l'utiliser, aucun test n'est 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());
            }
    }
0
tjb