我有一个 ArrayList,其中包含自定义服务对象。我想将整个 ArrayList 写入一个文件,然后能够读取它。
我尝试了 Gson,但它给了我一个 IllegalStateException: Expected BEGIN_ARRAY but was STRING。我让它记录应该是 JSON 的字符串,它在其中说了很多异常(作为字符串内的文本..也许转换出了问题?)。
public int saveListToFile(){
String filename = "service_entries";
File file = new File(getFilesDir(), filename);
try {
BufferedWriter buffWriter = new BufferedWriter(new FileWriter(file, true));
Gson gson = new Gson();
String json = gson.toJson(services); //this is the ArrayList<Service>
buffWriter.append(json);
buffWriter.newLine();
buffWriter.close();
} catch (IOException e) {
return -1;
}
return 0;
}
public int readCurrentList(){
String filename = "service_entries";
File file = new File(getFilesDir(), filename);
try {
BufferedReader buffReader = new BufferedReader(new FileReader(file));
String line1, line2;
Gson gson = new Gson();
line1 = buffReader.readLine();
line2 = buffReader.readLine();
if(line1 == null){
buffReader.close();
return 0;
}
Type type = new TypeToken<ArrayList<Service>>(){}.getType();
services = gson.fromJson(line1, type);
ArrayList<Service> list2;
if(line2 != null){
list2 = gson.fromJson(line2, type);
services.addAll(list2);
list2 = null;
}
buffReader.close();
} catch(IOException e){
return -1;
}
return 0;
}
public class Service {
private double quantity;
private String description;
public Service(){
quantity = 0.0;
description = null;
}
}
我建议对此类操作使用序列化。您可以实现 Java 的 Serialized 接口,然后可以将对象压缩到 .ser 文件中,然后从该文件中将它们膨胀回来,以从中调用您需要的方法。
这是关于序列化的一个很好的教程 -http://www.tutorialspoint.com/java/java_serialization.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)