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

标签 java android text-files textfield read-write

我正在开发一个应用程序,用户在其中的一些文本字段中输入一些数字信息,该应用程序应该将信息写入一个 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/

相关文章:

file - 为什么文本文件应该以换行符结尾?

c - 在c中逐行读取整数

java - 使用类似于 Node.js 的 Java 进行文件流传输

java - 改造 2.0 + GSON + Android : Unable to invoke no-args constructor for interface retrofit2. http.Body

android - 添加/注入(inject)/强制 &lt;meta-data> 行到每个已安装应用程序的 list 中

android - 单击通知时加载 fragment android

java - Libsass-mave-plugin 多个输入输出目录

java - 为什么使用int参数的方法被认为是数值?

android - 下载文件android的问题

keyboard-shortcuts - Notepad++:通过快捷方式将第一个字母大写?