Проверьте, существует ли файл - PullRequest
47 голосов
/ 07 мая 2010

Я пытаюсь открыть файл в Android, как это:

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

, но если файл не существует, генерируется исключение не найденный файл. Я хотел бы знать, как я могу проверить, существует ли файл, прежде чем пытаться открыть его.

Ответы [ 7 ]

161 голосов
/ 27 сентября 2010

Я думаю, что лучший способ узнать, существует ли файл, не пытаясь его открыть, заключается в следующем:

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

Надеюсь, это поможет, пока!

26 голосов
/ 07 мая 2010

В документации говорится, что Context.openFileInput возвращает inputStream (файл найден) или выдает исключение FileNotFoundException (не найдено)

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

Так что, похоже, исключением является ваш "тест".

Вы также можете попробовать использовать стандартный

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

Но это не рекомендуется. Context.openFileInput () и Context.openFileOutput () гарантируют, что вы остаетесь в контексте хранения ваших приложений на устройстве, и что все ваши файлы получают удаляется, когда ваше приложение удаляется.

5 голосов
/ 26 сентября 2012

При стандартном java.io.File это функция, которую я создал, и она работает правильно:

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();
}
2 голосов
/ 07 мая 2010

почему бы вам просто не перехватить исключение FileNotFound и принять его за отсутствующий файл.

1 голос
/ 29 сентября 2016

Если вы хотите убедиться, что файл существует (то есть, если он не существует, создайте новый, если он существует, не стирайте его), используйте File.createNewFile:

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

, например

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

}
0 голосов
/ 23 июня 2012

Мое предложение - проверить длину файла. if file.length() returns 0 это означает, что файл не существует.

0 голосов
/ 12 мая 2012

Если вы хотите открыть файл в любом случае (то есть, если он не существует, создайте новый, если он добавляется к старому), вы можете использовать это, тестирование не требуется:

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());
            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...