Запись в файл, но файл пуст, когда я читаю его в

Я пишу текстовый файл во внутреннюю память Android, чтобы сохранить некоторые настройки. Я считаю, что функция записи в файл работает правильно, но когда я перечитываю файл (даже сразу после записи), файл оказывается пустым. Я рассмотрел несколько других вопросов/ответов о переполнении стека, и ни один из них не решает мою проблему.

private void saveOtherData() {
        JSONObject settingsJson = new JSONObject();

        try {
            OutputStreamWriter writer;
            File testFile = new File(userProfile.this.getFilesDir(), "settings.txt");
            if (!testFile.exists()) {
                testFile.createNewFile();
                testFile.mkdir();
            }
            writer = new OutputStreamWriter(userProfile.this.openFileOutput("settings.txt", Context.MODE_PRIVATE));

            --code that adds a bunch of data to settingsJson

            writer.write(settingsJson.toString());
            //this line shows that settingsJson has the values I want
            System.out.println(settingsJson);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException ex) {
            ex.printStackTrace();
        }

Следующий код запускается сразу после кода выше. Но while ((line = br.readLine()) != null) всегда имеет значение null, что, как я предполагаю, означает, что текстовый файл пуст.

        //test the file reader

        try {
            JSONObject settings;
            String jsonCode = "";
            StringBuilder text = new StringBuilder();
                File file = new File(userProfile.this.getFilesDir(), "settings.txt");

                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;
                while ((line = br.readLine()) != null) {
                    text.append(line);
                    text.append('\n');
                }
                br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Любые идеи о том, что происходит не так?


person chargerstriker    schedule 01.02.2018    source источник
comment
Ну, ваш mkdir() не имеет смысла, потому что вы вызываете его после того, как уже создали файл. Вы никогда не закрываете файл после его написания, и код, который вы говорите, показывает, что settingsJson имеет то, что я хочу, но это не имеет ничего общего с файлом. У вас нет абсолютно никакого приложения на вашем устройстве, которое позволило бы вам открыть файл settings.txt, чтобы увидеть, правильно ли он вне вашего приложения, вместо того, чтобы просто верить, что вы его правильно написали?   -  person Ken White    schedule 01.02.2018
comment
Настройки JSONObjectJson = new JSONObject(); Иметь какую-то ценность?   -  person lib4    schedule 01.02.2018
comment
Кроме того, ваш println печатает settingsJson, но ваш код записи пишет settingsJson.ToString(). Это не одно и то же.   -  person Ken White    schedule 01.02.2018
comment
@KenWhite Я только что проверил и напечатал settingsJson.toString() и просто settingsJson напечатал одно и то же....   -  person chargerstriker    schedule 01.02.2018
comment
Неверное сравнение. Println() может иметь перегруженные функции.   -  person greenapps    schedule 01.02.2018
comment
writer.close(); отсутствует.   -  person greenapps    schedule 01.02.2018
comment
File testFile = new File(userProfile.this.getFilesDir(), "settings.txt"); if (!testFile.exists()) { testFile.createNewFile(); testFile.mkdir();. Удалите весь этот код. Вам это не нужно. Более того, вы пытаетесь создать каталог, в котором вы уже создали файл с таким же именем.   -  person greenapps    schedule 01.02.2018
comment
Вы должны использовать getFilesDir() в обеих функциях.   -  person greenapps    schedule 01.02.2018