java - 文件不追加 android

标签 java android file file-io

我有一个文件,我想向其中添加唯一的项目。每次我尝试附加该文件时,该文件都会被覆盖。一个类用于添加唯一项目,另一个类用于以 ListView 形式查看项目。 注意在执行写入操作时写入Context.MODE_APPEND时,它在第二类的ListView中给我空白。

AddingToFile.java

String filename2="grocery24_2.txt";
ArrayList<String> pantryarrlist = new ArrayList<String>();
public void showResult(View v) { button onclick event
    for (Product p : listviewAdapter.getBox()) {
        if (p.selected){
            if(!pantryarrlist.contains(p.name)) {
                pantryarrlist.add(p.name);
                try {
                    FileOutputStream fos = openFileOutput(filename2, Context.MODE_PRIVATE);
// This gives blank->FileOutputStream fos = openFileOutput(filename2, Context.MODE_APPEND);
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    oos.writeObject(pantryarrlist);
                    oos.close();
                    fos.close();
                } catch (Exception e) {
                }
            }
        }
    }
}

Pantry.java 从文件中读取

public class Pantry extends ListActivity{
ListView listView;
ArrayAdapter<String> adapter;
String filename = "grocery24_2.txt";
List newArrList = new ArrayList();
List pantryarrlist = new ArrayList();
File file = new File(filename);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pantry);
    listView = getListView();
    listView.setTextFilterEnabled(true);
    listView.setFocusable(true);

        FileInputStream fis = openFileInput(filename);
        ObjectInputStream ois = new ObjectInputStream(fis);
        newArrList = (ArrayList) ois.readObject();
        pantryarrlist.addAll(newArrList);
        ois.close();
        fis.close();

       adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, newArrList);
       listView.setAdapter(adapter);
    }

最佳答案

虽然我对您想要实现的目标有点困惑,但我假设您希望在一个文件中包含多个 pantryarrlist 对象。否则你不需要追加。

我创建了一个基本项目,它将 String 对象写入文件,然后读取它。使用 PrintWriterMODE_APPEND,它会按预期进行:附加文本。但是,使用 ObjectOutputStreamMODE_APPENDwriteObject( new String("text") ) 时,它似乎不会追加,并且只读取第一个 String 对象。您在评论中说没有错误,但我可以看到引发异常:

java.io.StreamCorruptedException: Wrong format: ac

你能确认你的堆栈跟踪中也有这个吗? 我建议您也创建一个基本设置,首先编写一些文本,看看它是否附加,然后尝试编写一个简单的对象并读取它们。

发生此异常的原因解释如下: java.io.StreamCorruptedException: Wrong format when reading more than 1 object

关于java - 文件不追加 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301164/

相关文章:

java - 查看寻呼机设置当前项目不能正常工作

java - 如何在同一个矩形上进行两次触摸

java - 在自动完成 TextView 中获取后退空格按钮单击操作事件

file - ansible 查找的替代方法,因为它总是在 localhost 上查找文件

java - 如何将 txt 文件从互联网加载到我的 jsf 应用程序中?

java - 如何使用 IBM X-Force Exchange API?

java - "Varaible"无法解析为变量

android - 如何在 Android 上的 exif 数据中保存 GPS 坐标?

Java:将txt文件放入第二个数组中

java - 将包含 XML 的字符串写入文件