OpenFileOutput FileNotFoundException
Это мой вопрос о нобе за неделю. Я больше ищу больше общих предположений, чем конкретный код, и, возможно, надеюсь, что люди Android будут смотреть и могут это исправить:
Документация SDK для Context.openFileOutput говорит:
Откройте частный файл, связанный с этим пакетом приложений Context для записи. Создает файл, если он еще не существует.
Хорошо, это звучит хорошо. Я могу создать файл. Кроме этого метода также генерируется исключение FileNotFoundException, поэтому, очевидно, что-то не так. Почему функция, которая должна создать файл, если он не найден, генерирует исключение, если файл не найден???
Поражает поражение целиком "Создает файл...", не так ли?
Ответы
Ответ 1
Я должен извиниться за прыжок, прежде чем я посмотрю на это. Я как бы запаниковал, читая документацию. После некоторого тестирования я обнаружил, что openFileOutput()
действительно работает как рекламируемый и создаст файл, если он не будет найден, а не просто выбросит исключение FnF, как я боялся. По-видимому, бросок FnF был добавлен в случае, если каталог приложения Activity не существует.
Опять же, мои извинения, но, надеюсь, это может помочь другим, которые смущены документацией.
Ответ 2
FileNotFoundException - это исключение, возникшее в случае, если вы пытаетесь записать файл, который не существует или к которому в настоящий момент не доступен доступ. Когда еще это произойдет?
- Возможно, вы забыли закрыть файл и попытались открыть тот же файл.
- Возможно, вы попытались создать несколько объектов FileOutputStream, указывающих на один и тот же файл.
Это приведет к исключению FileNotFoundException.
В любом случае вы можете вставить throws FileNotFoundException
в конце объявления функции, где вы вызываете openFileOutput (и другим функциям, вызывающим эту функцию).
Ответ 3
Возможно также выбрасывается, если вы используете MODE_APPEND, который добавляется к существующему файлу, и файл не существует.
Ответ 4
Вы вставили правильное разрешение?
см. http://developer.android.com/reference/android/Manifest.permission.html
для справки.
я думаю
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
может быть тем, с кем вы в порядке