我编写了这段代码,以将/加载值保存到文本文件(ScoreFile.txt)上或从文本文件(ScoreFile.txt)获取的int arrayScore [10] [1000]中。
saveData包含在onStop()方法中,而loadData包含在onCreate()方法中。当我打开/运行/关闭应用程序时,不会引发任何异常。吐司确实说“已加载数据”和“已保存数据”。
arrayScore [] []的值在应用程序运行时会发生更改,这由屏幕上显示的这些新值确认。因此,在运行时一切正常。
但是,在开始新会话时,上次会话的值未加载,在此之后的最后一个会话中,我上的
File scoreFile = new File("ScoreFile.txt");
public void saveData() {
try {
PrintWriter output = new PrintWriter(scoreFile);
int p, q;
for (p = 0; p <= 9; p++) {
for (q = 0; q <= 999; q++) {
output.println(arrayScore[p][q]);
}
}
} catch (Exception e){
Toast.makeText(this, "Exception savedData", Toast.LENGTH_LONG).show();
} finally {
}
Toast.makeText(this, "Data saved", Toast.LENGTH_LONG).show();
}
public void loadData() {
try {
Scanner input = new Scanner(scoreFile);
int p, q;
for (p = 0; p <= 9; p++) {
for (q = 0; q <= 999; q++) {
arrayScore[p][q] = input.nextInt();
}
}
} catch (Exception e) {
Toast.makeText(this, "Exception loadData", Toast.LENGTH_LONG).show();
} finally {
}
Toast.makeText(this, "Data loaded", Toast.LENGTH_LONG).show();
}
答案 0 :(得分:0)
几点。首先,您是否有权在该位置写入创建文件?通常,您会在文件名前加上应用程序内部/外部存储的路径,并在执行任何操作之前检查文件是否存在。例如(有很多写文件的方法):
File file = new File(context.getFilesDir(), "ScoreFile.txt");
try (final FileOutputStream fos = context.openFileOutput(file, Context.MODE_PRIVATE)){
fos = openFileOutput(filename, Context.MODE_PRIVATE);
//for...
fos.write(/*...*/);
} catch (Exception e) {
e.printStackTrace();
}
第二,您是否声明了清单中文件系统的读写权限?在Oreo +上,您可能还需要运行时权限。
第三,当然,您会看到“ Data Saved”吐司,因为无论如何它都会运行。将其替换为throws new RuntimeException(e);
中的catch
,然后查看您的应用是否崩溃。如果是这样,请检查LogCat并将异常添加到您的问题。
第四,您可能需要在flush()
上致电PrintWriter