Android, как проверить, существует ли файл и еще создать? - PullRequest
2 голосов
/ 25 июня 2011

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

Итак, когда создается мое основное действие, мне нужно проверить, существует ли этот файл:

public class appname extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.no_elements_l);

      File file = getBaseContext().getFileStreamPath("/sdcard/appname/data.xml");
      if(file.exists()) { 

            return;

      } else {

            // create a File object for the parent directory
            File MTdirectory = new File("/sdcard/appname/");

            // have the object build the directory structure, if needed.
            MTdirectory.mkdirs();

            // create a File object for the output file
            File outputFile = new File(MTdirectory, "data.xml");

            // now attach the OutputStream to the file object, instead of a String representation
            FileOutputStream DataFile = new FileOutputStream(outputFile);
      }

Но у меня есть необработанный тип исключения FileNotFoundException в последней строке.В чем проблема?Используется разрешение WRITE_EXTERNAL_STORAGE добавлено в манифест.

Ответы [ 2 ]

4 голосов
/ 25 августа 2012

Не указывайте путь к файлу SDCard. Может отличаться для разных устройств и API.

Например, это /mnt/sdcard/ для Froyo, в то время как у моего Galaxy Nexus (JellyBean) /storage/sdcard0/

Руководство разработчика Android рекомендует использовать Environment.getExternalStorageDirectory()

Попробуйте сделать это так:

// Some Code

String path = Environment.getExternalStorageDirectory().getPath() + "/appname/";
File file = getBaseContext().getFileStreamPath(path);

// More Code
2 голосов
/ 25 июня 2011

Существует ли путь '/ sdcard / appname'?Вы проверяете файл, прежде чем проверять подкаталог appname.Вам нужно проверить, существует ли он, прежде чем пытаться получить доступ к файлу внутри него.

Также, если вам просто нужен файл для чтения-записи данных приложения, почему бы просто не пойти с внутренним хранилищем - еще одно разрешение меньше :) -> читайте здесь для внутреннего хранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...