不能在文件中写入超过1行

时间:2014-03-12 10:24:09

标签: android

我正在尝试将一个名称列表写入文本文件。它一次写成一行,我有一个写入文件和阅读的课程。 这是班级:

package com.example.mobiledayoff;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

import android.content.Context;

public class userListIO {

Context fileContext;

public userListIO(Context fileContext){
    this.fileContext=fileContext;
}

public void writeItems(String fileName, String name){
    final String ls = System.getProperty("line.separator");
    BufferedWriter writer = null;
    try{
        writer = 
            new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE)));
        writer.write(name + ls);
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        if (writer != null) {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

public ArrayList<CharSequence> readItems(String filename){
    ArrayList<CharSequence> list = new ArrayList<CharSequence> ();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(fileContext.getApplicationContext().openFileInput(filename)));
        String line;

        while((line = br.readLine()) != null){
            list.add(line);
        }
    } catch (Exception e) {
         e.printStackTrace();
      } finally {
      if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
                e.printStackTrace();
            }
        }
      }

    return list;
}

}

我使用此类将用户输入(EditText)中的一行写入文件。然后我从文件中读取并在另一个EditText中显示该文件的内容。我是这样做的:

public void addUser(View view){
    EditText text = new EditText(this);
    text = (EditText)findViewById(R.id.add_user_text);
    String name = text.getText().toString();        
    String filename = "userList.txt";

    userListIO messenger = new userListIO(this);

    messenger.writeItems(filename, name);

    text.setText("");

    ArrayList<CharSequence> list = messenger.readItems(filename);

    EditText editText = (EditText) findViewById(R.id.debug_text);

    String info = "";
    int count = 0;
    for (CharSequence item: list){
        info += item.toString();
        count++;
    }

    info += "; there are " + count + " lines";

    editText.setText(info);
}

我的主要问题是,每次写入文件时都会覆盖文件,所以我总是有1行。你们知道如何解决这个问题吗?通过修复我的意思是:如果它已经存在,如何附加到文件或如果它不存在则创建一个。

此外,我发现在关闭并重新打开应用程序后,该文件不存在。如何创建和保存文件,以便在关闭和重新打开后我仍然可以使用存储在那里的数据?

P.S。读/写取自这里: The best way to store user input data for later work

1 个答案:

答案 0 :(得分:3)

更改

new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE)));

new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE | Context.MODE_APPEND)));

这将结合MODE_PRIVATE标志以及MODE_APPEND标志。

P.S。每次写一行时,您都应该远离打开和关闭流。这会产生大量开销,而应该尝试保持流打开,直到所有数据都被处理完毕。