Я пытался обойти это несколько часов, и я очень расстроен, поэтому я прихожу к вам, ребята, для некоторого руководства.
Я пытаюсь сохранить и получить объект User, который я создал. Я хочу сделать так, чтобы я мог сохранять и извлекать этот объект User с любого намерения во всем моем приложении, поэтому я решил пойти с потоком FileInput и Output. Я включил свой код для обоих ниже.
Вот мой метод выходных данных:
И вот мой метод ввода данных:
Примечание. Оба этих метода находятся внутри моего класса User, который также реализует Serializable.
Вся ошибка в пути к файлу выглядит так: java.io.FileNotFoundException: /storage/emulated/0myFile.ser(Permission denied) и он появился в этой строке: FileOutputStream fos = new FileOutputStream(newFile); когда я назвал это с другого намерения следующим образом: User.serializeDataOut(addingUser); в котором addUser был действительным объектом пользователя.
Первое, что я сделал после просмотра (Permission denied) в журнале исключений, — это войти в мой манифест и проверить, разрешаю ли мое приложение читать и записывать на хранение, что я действительно делал. Я включил свои разрешения ниже:
Затем я прочитал, что у некоторых людей была эта ошибка, если у них был неправильный путь, более конкретно не включая абсолютный путь, который я тогда редактировал мой код, чтобы включить Environment.getExternalStorageDirectory().getAbsolutePath(); часть, которую я уверен, что правильно использую.
Я также убедился, что, поскольку я тестирую это на эмуляторе, я включил SD-карту, а эмулятор имел папку SD. Я проверил, и у него действительно была папка с SD-картой, и я также тестировал это приложение на S8, и я получил ту же ошибку.
Что именно я делаю неправильно здесь? Все, что я хочу сделать, — это сохранить один объект пользователя и получить его в другом месте, и я отлично справляюсь с тем, что предыдущий файл перезаписан и только один пользователь был сохранен за раз.
I have been trying to work around this for several hours and I am extremely frustrated so I am coming to you guys for some guidance.
I am trying to save and retrieve a User object I have created. I want to make it so that I can save and retrieve this User object from any intent throughout my application, so I decided to go with a FileInput and Output stream. I have included my code for both below.
Here is my output data method:
And here is my input data method:
Note: both of these methods reside inside my User class, which also implements Serializable.
The whole error with the file path looks like this: java.io.FileNotFoundException: /storage/emulated/0myFile.ser (Permission denied) and it appeared at this line: FileOutputStream fos = new FileOutputStream(newFile); when I called it from a different intent like so: User.serializeDataOut(addingUser); in which addingUser was a valid User object.
The first thing I did after seeing (Permission denied) in the exception log, was go into my manifest and check if I was allowing my application to read and write to storage, which I did in fact do. I have included my permissions below:
Then I read that some people were having this error if they had the wrong path, more specifically not including the absolute path, which I then edited my code to include the Environment.getExternalStorageDirectory().getAbsolutePath(); part, which I am pretty sure I am using correctly.
I also made sure that, since I am testing this on an emulator, that I had enabled an SD card and the emulator had an SD folder. I checked and it indeed did have an SD card folder, and I also tested this application on an S8 and I got the same error.
What exactly am I doing wrong here? All I want to do is save one User object and retrieve it somewhere else, and I am perfectly ok with a previous file being overwritten and only having one User saved at a time.
How to solve Android Emulator java.io.FileNotFoundException open failed: EACCES (Permission denied)
Following error in Android application is very annoying and you may waste several hours by hunting the root cause:
It might occur even when the manifest is correct and contains proper permission:
Here is sample code which will pass on file existence check, but the execution will fail on readBytes:
To fix this problem it is necessary to go to Settings – Apps – My App – Permission.
Access to Storage is probably disabled. Tap Storage to enable it:
With enabled Storage option, the application was able to read the file.
To solve this problem in a proper way, it’s necessary to add a request for permission to the code. Here is a sample in Kotlin:
You can find more details about requesting permissions in Android documentation.
Источник: