gpt4 book ai didi

java - 读取和写入文本文件时的错误

转载 作者:行者123 更新时间:2023-11-29 21:41:35 25 4
gpt4 key购买 nike

我正在开发一个应用程序,用户在其中的一些文本字段中输入一些数字信息,该应用程序应该将信息写入一个 txt 文件以备后用,例如下次打开应用程序或刷新按钮时按下时,应从文件中读取数字并将其加载到相同的文本字段中,以便用户可以根据需要更改它们。虽然“writer”和“loader”功能似乎都在工作,但问题是每次调用“loader”时,它都会从以前保存的文件中加载数据,而不是“writer”现在创建的文件”。如果用户希望将新保存的数据加载到文本字段中,他需要关闭并重新打开应用程序。为了更好地解释情况,我在代码之后放置了一些场景。知道哪里出了问题以及可以做什么吗?

这是我用来将信息放入文件的代码,它工作正常:

    public void writer(View view){                               
try {

FileOutputStream fos = openFileOutput("myfilename", Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE);
PrintStream prntst = new PrintStream(fos);
txtEditor=(EditText)findViewById(R.id.editText1);
prntst.println (txtEditor.getText().toString());
txtEditor=(EditText)findViewById(R.id.EditText02);
prntst.println (txtEditor.getText().toString());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

这是我用来从文件读取信息到某个 ArrayList 的代码,然后这个 ArrayList 用于填充文本字段,这也工作正常(很好意味着没有错误):

    public void reader(View view){
try {

BufferedReader inputReader = new BufferedReader(new InputStreamReader(openFileInput("myfilename")));
Scanner scanner = new Scanner(inputReader);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
bld.add(line);
}

inputReader.close();
scanner.close();
txtEditor=(EditText)findViewById(R.id.editText1);
txtEditor.setText(bld.get(0));
txtEditor=(EditText)findViewById(R.id.EditText02);
txtEditor.setText(bld.get(1));


} catch (IOException e) {
e.printStackTrace();
txtEditor=(EditText)findViewById(R.id.editText1);
bld.add((txtEditor.getText().toString()));
txtEditor=(EditText)findViewById(R.id.EditText02);
bld.add((txtEditor.getText().toString()));
}
}

场景:

  1. 用户打开应用程序,文本字段(两个文本字段)中有一些默认值,用户将值分别更改为 2 和 3,然后点击保存按钮。
  2. 用户再次更改值,但他没有触摸保存按钮,而是点击了加载按钮,现在应用程序应该将 2 和 3 加载到字段(已保存)中,但它加载了默认值。
  3. 用户关闭应用程序并重新打开它们,这次 2 和 3 在文本字段中显示为默认值。似乎“加载程序”现在正在从先前保存的文件中读取数据。
  4. 用户将值从“2 和 3”更改为“13 和 14”并分别点击保存和加载按钮,但 2 和 3 已加载到字段中。
  5. 用户关闭并再次打开应用,这次显示 13 和 14。

附言。变量 bld 是全局变量,在 MainActivity 中定义:

    ArrayList<String> bld = new ArrayList<String>();

谢谢,

最佳答案

问题可能出在全局 ArrayList 变量“bld”上。全局定义是可以的,但是要在本地初始化。

问题是,您调用的是 bld.get(0) , 但新值会附加在它后面。

添加行 bld = new ArrayList<String>();在您的“阅读器”功能中。

关于java - 读取和写入文本文件时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com