Внутренняя память студии Android FileOutputStream FileNotFound - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю на Android Studio, и я хотел бы записать / сохранить файл во внутренней памяти.Я знаю, что есть пара таких вопросов по переполнению стека.Мне удалось получить этот код от тех.

public static void writeObj(Alarm alarm, Context context){
    FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try{
            fos = new FileOutputStream("ArrayList.txt", true);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(alarm);
            oos.flush();
            oos.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
             e.printStackTrace();
        }

Этот код не работал для меня.Мне удалось выяснить, что я получаю исключение FileNotFound, потому что FileOutputStream не может создать мой файл.Поэтому я сделал еще несколько копаний и добавил это выше к моему try / catch (заменив «ArrayList.txt» на f в FileOpenOutputStream).

    File f = new File(context.getFilesDir(),"ArrayList.txt");
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

Это создало для меня файл, что помогло мне преодолеть ловушку исключения FileNotFound, но теперь я получаю IOException.Я не смог найти решение этой проблемы.Может ли кто-нибудь дать мне несколько советов относительно причины, по которой я получу это исключение.Возможно, мне нужно добавить какое-то разрешение в файл манифеста, о котором я не знаю?

1 Ответ

0 голосов
/ 12 декабря 2018

См. Документацию здесь - https://developer.android.com/reference/java/io/ObjectOutputStream

Только потоки, поддерживающие интерфейс java.io.Serializable, могут быть записаны в потоки.

Поэтому вы должны реализоватьСериализуемый интерфейс для класса Alarm и всех его полей также должен быть Serializable, чтобы использовать ObjectOutputStream.

Дополнительную информацию можно найти в документации.

Дополнительные ссылки

Сериализация Java: какие классы нужно «реализовать Serializable»?

https://stackoverflow.com/a/28789107/9640177

...