使用Gson将对象数组写入文件

时间:2017-04-16 16:53:00

标签: java json gson

public boolean wirteJson(Passenger passenger[]){
    try {
        file = new FileWriter(System.getProperty("user.dir")+"/"+fileName);
        for (int i = 0; i < 10; i++) {
            String json =gson.toJson(passenger[i]);
            file.write(json);
        }
        file.flush();
        file.close();

    } catch (IOException ex) {
        return false;
    }
    return false;
}

我试图用Gson将passenger数组写入文件。我对其他选择持开放态度。

1 个答案:

答案 0 :(得分:3)

您不必按每个元素序列化给定的输入数组:

  • Gson可以自己完成所有工作;
  • 你的方法假定输入数组恰好是10个元素长(因此,如果输入数组中元素较少,则只抛出ArrayIndexOutOfBoundsException,或者只写入前10个元素);
  • 您的方法无法编写格式正确的JSON:{},{},{}无效,而[{},{},{}]则为;
  • 您的方法suggestedRealSkeptic,不需要中间字符串表示。

您只需要两种方法Gson.toJsonGson.fromJson。 所以,这是一个简单的例子:

final class Passenger {

    final String name;

    Passenger(final String name) {
        this.name = name;
    }

}
public static void main(final String... args)
        throws IOException {
    final File file = createTempFile("q43439637_", "_q43439637");
    file.deleteOnExit();
    try ( final FileWriter fileWriter = new FileWriter(file) ) {
        final Passenger[] before = { new Passenger("Alice"), new Passenger("Bob") };
        gson.toJson(before, fileWriter);
    }
    try ( final FileReader fileReader = new FileReader(file) ) {
        final Passenger[] after = gson.fromJson(fileReader, Passenger[].class);
        for ( final Passenger p : after ) {
            System.out.println(p.name);
        }
    }
}

输出:

  

爱丽丝
  鲍勃

P.S。您的catch return似乎不得不返回true而不是false。此外,flush()之前不需要close()