2015-07-21 3 views
-4

Я пытаюсь проверить, существует ли файл на моей SD-карте с этим кодом, но у меня есть некоторые проблемы. Версия API на моем Android-телефоне - 19, а версия API - 19, но есть много исключений из другого приложения, к которым я не хочу работать, например, с помощью zedge. Пожалуйста, дайте мне несколько советов о том, как проверить, существует ли этот файл.Android: Как проверить, существует ли файл на моей SD-карте

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    File extStore = Environment.getExternalStorageDirectory(); 
    File myFile = new File(extStore.getAbsolutePath() + "/test.txt"); 

    if(myFile.exists()){ 
     Log.d("File", "exists"); 
    } 

} 


public boolean isExternalStorage() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 

}

Мой файл манифеста, как это:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

вы найдете множество ссылок с одной и той же проблемой вместе с их решениями – Shekhar

+0

Ваш вопрос слишком расплывчатый. Вы уже проверяете, существует ли файл. Что вы подразумеваете под «исключениями из другого приложения»? –

ответ

0

ваш код просто проверяет, существует ли файл в SDCard/FileName.Ext :

File extStore = Environment.getExternalStorageDirectory(); 
    File myFile = new File(extStore.getAbsolutePath() + "/test.txt"); 

    if(myFile.exists()){ 
     Log.d("File", "exists"); 
    } 

Для поиска файловой системы (реж дерева), нам нужен рекурсивная функция, которая входит в каталог или сравнивает файл с именем поиск файла:

public static boolean searchForFile(File root, File mySearchFile) 
{ 
    if(root == null || mySearchFile == null) return; //just for safety 

    if(root.isDirectory()) 
    { 
     Boolean flag = false; 
     for(File file : root.listFiles()){ 
      flag = searchForDatFiles(file, mySearchFile); 
      if(flag) return true; 
     } 
    } 
    else if(root.isFile() && root.getName().equals(mySearchFile.getName()) 
    { 
     return true; 
    } 
return false; 
} 

UPDATE

Just увидел, что вы ищете файл только в корневой папке. Проверьте this ссылку на четыре способа проверить, существует ли файл. Кроме того, выше код будет работать только для SD-карты, но не рекомендуется, потому что он будет анализировать все папки, с которыми он впервые сталкивается. Хорошо подходит для поиска всего каталога.

+0

ОК, но теперь я пытаюсь проверить, существует ли этот файл в этом жестком закодированном пути, потому что позже я попытаюсь его зашифровать. Мне не нужно искать систему entrire для файла с заданным именем. – Metala

+0

Я обновил ответ – Kay

Смежные вопросы