Prueba si el archivo existe

Estoy intentando abrir un archivo en Android como este:

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) { } 

, pero en caso de que el archivo no exista, se lanza una excepción de archivo no encontrado. Me gustaría saber cómo puedo probar si el archivo existe antes de intentar abrirlo.

Creo que la mejor manera de saber si un archivo existe, sin intentar abrirlo realmente, es el siguiente:

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

Espero que ayude, adios!

La documentación dice que Context.openFileInput devuelve un inputStream (archivo encontrado) o arroja un FileNotFoundException (no encontrado)

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

Entonces parece que la excepción es tu “prueba”.

También puedes intentar usar el estándar

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

Pero eso no es recomendado. Context.openFileInput () y Context.openFileOutput () se aseguran de que permanezca en el contexto de almacenamiento de las aplicaciones en el dispositivo, y de que todos sus archivos se eliminen cuando la aplicación se desinstala.

Con el estándar java.io.File esta es la función que he creado, y funciona correctamente:

 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(); } 

¿por qué no captas la excepción FileNotFound y la tomas porque el archivo no está presente?

Si desea asegurarse de que existe un archivo (es decir, si no existe, cree uno nuevo, si lo hace, entonces no lo borre) y luego use File.createNewFile:

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

p.ej

 { String pathName =  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(); } } 

Si desea abrir un archivo en cualquier caso (es decir, si no existe, cree uno nuevo, si se agrega al anterior) puede usarlo, sin necesidad de realizar pruebas:

 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()); } } 

Mi sugerencia es verificar la longitud del archivo. if file.length() returns 0 significa que el archivo no existe.