Я пишу текстовый файл во внутреннюю память 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();
}
}
Любые идеи о том, что происходит не так?
mkdir()
не имеет смысла, потому что вы вызываете его после того, как уже создали файл. Вы никогда не закрываете файл после его написания, и код, который вы говорите, показывает, что settingsJson имеет то, что я хочу, но это не имеет ничего общего с файлом. У вас нет абсолютно никакого приложения на вашем устройстве, которое позволило бы вам открыть файлsettings.txt
, чтобы увидеть, правильно ли он вне вашего приложения, вместо того, чтобы просто верить, что вы его правильно написали? - person Ken White   schedule 01.02.2018println
печатаетsettingsJson
, но ваш код записи пишетsettingsJson.ToString()
. Это не одно и то же. - person Ken White   schedule 01.02.2018settingsJson.toString()
и простоsettingsJson
напечатал одно и то же.... - person chargerstriker   schedule 01.02.2018writer.close();
отсутствует. - person greenapps   schedule 01.02.2018File testFile = new File(userProfile.this.getFilesDir(), "settings.txt"); if (!testFile.exists()) { testFile.createNewFile(); testFile.mkdir();
. Удалите весь этот код. Вам это не нужно. Более того, вы пытаетесь создать каталог, в котором вы уже создали файл с таким же именем. - person greenapps   schedule 01.02.2018getFilesDir()
в обеих функциях. - person greenapps   schedule 01.02.2018