【问题标题】:Why does this gson function save a blank file?为什么这个 gson 函数会保存一个空白文件?
【发布时间】:2019-03-29 04:53:09
【问题描述】:

我正在尝试创建一个 java 应用程序,但我对 gson API 中的一个函数有疑问。为什么这行代码生成一个空的json文件却没有任何错误显示?

重现此问题的示例对象:

public class Employee {

    private String name;
    private String occupation;

    public Employee(String name, String occupation) {
        super();
        this.name = name;
        this.occupation = occupation;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

}
//this refers to a simple java object that works with gson
gson.toJson(this, new FileWriter(new File("somefile.json")));

【问题讨论】:

  • 你有什么错误吗?
  • 发布更多代码
  • 不,我没有任何错误。我会尝试发布更多代码

标签: java gson


【解决方案1】:

我尝试使用 HashMap 对象,因为 OP 没有 java 对象,但它应该适用于任何其他类型的 Java 对象。
它工作正常,问题出在编写器上,您需要刷新内容并关闭流。

        Map<String, String> map = new HashMap<>();
        map.put("a","b");
        map.put("c","d");
        Gson gson = new Gson();
        FileWriter writer = new FileWriter(new File("somefile.json"));
        gson.toJson(map, writer);
        writer.flush();
        writer.close();

文件内容:

{"a":"b","c":"d"}

上面的代码可以写成

try(FileWriter writer = new FileWriter(new File("somefile.json"))) {
    gson.toJson(map, writer);
    writer.flush();
}

这里你不需要显式关闭流,这种代码风格优于第一种,并且避免将来出现任何此类错误。

【讨论】:

  • FileWriter 实现 AutoClosable,所以这在 Try With Resources 块中会更好
  • 很好 :) 我很确定 flush 也可以省略,因为隐式调用的 close 方法将在关闭流之前刷新。
  • 是的,可以,但取决于实现:stackoverflow.com/a/9272606/2987755
  • "如果你绝对,肯定地必须确保它被写入,调用flush()。你可以随时调用flush,你可以随意调用它。如果没有什么要刷新,开销是最小的。”参考:coderanch.com/t/442764/java/fileWriter-flush
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多