2013-06-05 2 views
2

Я сделал файл, используя:FileNotFoundException при открытии файла, который существует?

FileOutputStream fos = app.openFileOutput("FileOne.txt", Context.MODE_APPEND); 

Позже в той же программе, я пытаюсь открыть этот файл, используя:

PrintWriter writer = new PrintWriter(context.getFileStreamPath("FileOne.txt")); 

но делать это дает это исключение в LogCat:

06-05 09:49:32.230: D/error155 java.lang.RuntimeException: File not found(7707): [ 06-05 09:49:32.240 7707: 7736 D/ java.io.FileNotFoundException: /FileOne.txt: open failed: EROFS (Read-only file) 

Я проверил внутреннее хранилище, и файл существует. Как правильно открыть файл?

+0

вы прочитать сообщение об ошибке до конца? файл ro –

+2

Или почему API 'File' отстой. Если вы используете Java 7, сделайте себе одолжение и используйте новый API 'Files'. 'FileNotFoundException' также вызывается, если файл существует, но у вас нет необходимых учетных данных для того, что вы пытаетесь сделать! – fge

+1

Сначала проверьте файл просто File file = new File (путь); Файл существует(); может быть путь, по которому ваше обеспечение отличается. Также проверьте флажки files.read() и file.write() –

ответ

3

файл File = новый файл (ваш путь);

// Во-первых, убедитесь, что файл существует на пути при условии, используя приведенную ниже инструкцию:

File.Exists();

Проверьте, если разрешение файла позволяют:

file.canExecute(); – return true, file is executable; false is not. 
file.canWrite(); – return true, file is writable; false is not. 
file.canRead(); – return true, file is readable; false is not. 

Установите разрешение файла:

file.setExecutable(boolean); – true, allow execute operations; false to disallow it. 
file.setReadable(boolean); – true, allow read operations; false to disallow it. 
file.setWritable(boolean); – true, allow write operations; false to disallow it. 
+0

Это разрешило это частично. Теперь тот же код иногда срабатывает и иногда выдает исключение! –

+1

@vergilcorleone - это бессмысленный ответ. Какие изменения вы внесли, какой статус эти запросы сообщал в рабочих или нерабочих случаях? –

+0

@ChrisStratton Использование 'file.setReadable (true);' вызывает исключение исключения. Это означает, что иногда код будет работать без какой-либо ошибки (т. Е. Файл читается), и иногда он генерирует исключение. –

1

файл может быть найден, но это только для чтения

open failed: EROFS (Read-only file)

Название FileNotFoundException является missleading

+1

Хорошая точка. Однако, интересно, действительно ли он доступен только для чтения (что-то не ожидалось бы от упущения) или, возможно, оно заблокировано в результате того, что он уже был открыт в режиме записи по предыдущему вызову? –

+0

Я не могу сказать, что ;-) –

-1

Это исключение также вызывается, когда:

  • Файл является фактически Папка.
  • Если вы не имеете necesary разрешения на доступ к файлу

Изменение разрешений этого файла, чтобы открыть его (CHMOD 777 FileOne.txt)

EDIT:

Если это андроид приложение, добавить следующее разрешение на манифеста:

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

Спасибо за ответ. Как получить разрешение на запись? –

+0

Какая ОС вы используете? Windows, Linux, MAC? – Corbella

+0

Это на самом деле приложение для Android, но я кодирую в Windows 7. –

-1

этот файл создается в: корневой, который не читается я думаю.

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

Отредактировано:

FileOutputStream fos = app.openFileOutput(Environment.getExternalStorageDirectory() + File.separator +"FileOne.txt", Context.MODE_APPEND); 
+0

Как это относится к заданному вопросу? –

+0

см. Мой отредактированный раздел. –

+0

Не могли бы вы рассказать о том, как использовать ваш синтаксис по-другому? –

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