Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件不附加android_Java_Android_File_File Io - Fatal编程技术网

Java 文件不附加android

Java 文件不附加android,java,android,file,file-io,Java,Android,File,File Io,我有一个要添加唯一项的文件。每次我尝试附加该文件时,该文件都会被覆盖。一个类用于添加唯一的项目,另一个类用于以列表视图查看项目注意在编写上下文时。模式_APPEND在执行写入操作时,它在第二个类的列表视图中为空 AddingToFile.java String filename2="grocery24_2.txt"; ArrayList<String> pantryarrlist = new ArrayList<String>(); public void showRes

我有一个要添加唯一项的文件。每次我尝试附加该文件时,该文件都会被覆盖。一个类用于添加唯一的项目,另一个类用于以
列表视图查看项目注意在编写
上下文时。模式_APPEND
在执行写入操作时,它在第二个类的
列表视图
中为空

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) {
                }
            }
        }
    }
}
stringfilename2=“grocery24_2.txt”;
ArrayList pantryarrlist=新建ArrayList();
public void showResult(视图v){button onclick事件
对于(产品p:listviewAdapter.getBox()){
如果(p.selected){
如果(!pantryarrlist.contains(p.name)){
食品储藏室列表。添加(p.名称);
试一试{
FileOutputStream fos=openFileOutput(filename2,Context.MODE\u PRIVATE);
//这将给出blank->FileOutputStream fos=openFileOutput(filename2,Context.MODE\u APPEND);
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(配餐区列表);
oos.close();
fos.close();
}捕获(例外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);
    }
public class Pantry扩展列表活动{
列表视图列表视图;
阵列适配器;
字符串filename=“grocery24_2.txt”;
List newArrList=newarraylist();
List pantryarrlist=新建ArrayList();
文件=新文件(文件名);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局,餐具室);
listView=getListView();
setTextFilterEnabled(true);
setFocusable(true);
FileInputStream fis=openFileInput(文件名);
ObjectInputStream ois=新ObjectInputStream(fis);
newArrList=(ArrayList)ois.readObject();
pantryarrlist.addAll(newArrList);
ois.close();
fis.close();
adapter=new ArrayAdapter(这个,android.R.layout.simple_list_item_1,android.R.id.text1,newArrList);
setAdapter(适配器);
}

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

我创建了一个基本项目,它将字符串对象写入一个文件,然后读取它。使用
PrintWriter
MODE\u APPEND
,它按照预期进行:文本被追加。但是,使用
ObjectOutputStream
MODE\u APPEND
writeObject(新字符串(“文本”))
,它似乎不会追加,只读取第一个字符串对象。您在注释中说没有错误,但我可以看到异常触发:

java.io.StreamCorruptedException: Wrong format: ac
你能确认你的stacktrace里也有这个吗? 我建议你也创建一个基本的设置,首先写一些文本,看看是否有附加内容,然后试着写一个简单的对象并全部阅读

发生此异常的原因解释如下:

FileOutputStream fos=openFileOutput(filename2,Context.MODE_PRIVATE);
.FileOutputStream fos=openFileOutput(filename2,Context.MODE_PRIVATE,true);
.Hmmm。该参数不存在。最好使用
新的FileOutputStream(fullfilepath.true)它给了我一个错误-openFileOutput()不能应用于ContextWrapper
尝试{…}捕获(FileNotFoundException e){}捕获(ClassNotFoundException e){}捕获(OptionalDataException e){}捕获(StreamCorruptedException e){}捕获(IOException e){}捕获(异常e){}
hehehe你正在吞咽所有像旧wh**这样的异常…首先修复它(至少将stacktrace打印到logcat中),而不带这个问题是离题的。忘记我说的。
FileOutputStream fos=openFileOutput(filename2,Context.MODE\u APPEND);
应该可以工作。@Selvin没有错误。它只是覆盖到文件中。为了缩短代码并在这里发布,我删除了对catch语句的所有处理。