Int array [] []不会保存到文本文件或从文本文件加载

时间:2019-07-14 14:34:15

标签: android

我编写了这段代码,以将/加载值保存到文本文件(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();
}

1 个答案:

答案 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