Java 序列化数据并写入文件
当我尝试将对象写入文件时,会遇到此错误Java 序列化数据并写入文件,java,android,Java,Android,当我尝试将对象写入文件时,会遇到此错误 02-05 11:31:41.818: W/System.err(2414): java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[], int, int)' on a null object reference 02-05 11:31:41.818: W/System.err(2414): at
02-05 11:31:41.818: W/System.err(2414): java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[], int, int)' on a null object reference
02-05 11:31:41.818: W/System.err(2414): at java.io.DataOutputStream.writeShort(DataOutputStream.java:192)
02-05 11:31:41.818: W/System.err(2414): at java.io.ObjectOutputStream.writeStreamHeader(ObjectOutputStream.java:1795)
02-05 11:31:41.818: W/System.err(2414): at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:271)
02-05 11:31:41.818: W/System.err(2414): at com.data.mydata.addData(addData.java:173)
//AllData扩展可序列化
List<AllData>valuelist = new ArrayList<AllData>(sensor.values());
if(valuelist.size() != 5){
try {
//fileStream = new FileOutputStream(filename);
oos = new ObjectOutputStream(fileStream);
oos.writeObject(valuelist);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Listvaluelist=newArrayList(sensor.values());
如果(valuelist.size()!=5){
试一试{
//fileStream=新的FileOutputStream(文件名);
oos=新的ObjectOutputStream(文件流);
oos.writeObject(值列表);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}否则{
试一试{
oos.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
基本上,当我的arraylist的大小不等于5时,我需要继续写入该文件,一旦它为5,我需要停止它。我的文件在SDCard的Documents/Sensor Data/myfile.txt中正确创建。您能帮助我如何解决此错误吗?从错误中可以看出,
valuelist
的某些元素为空。
做点像
try {
//fileStream = new FileOutputStream(filename);
oos = new ObjectOutputStream(fileStream);
+ List<AllData> nonNullList = new ArrayLis<>();
+ for(AllData aData: valuelist)
+ if(aData != null) nonNullList.add(aData);
+ oos.writeObject(nonNullList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
可能重复的感谢您的时间和帮助:)我使用了这个,但仍然存在相同的问题嗯,我不知道数据结构,但您肯定是在对空对象调用write。您应该调试并检查AllData中的某些字段是否为空
try {
//fileStream = new FileOutputStream(filename);
oos = new ObjectOutputStream(fileStream);
+ List<AllData> nonNullList = new ArrayLis<>();
+ for(AllData aData: valuelist)
+ if(aData != null) nonNullList.add(aData);
+ oos.writeObject(nonNullList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(valuelist.size() != 5){