java - 如何修复流关闭异常

标签 java json stream

我正在开发一个可以将列表写入 json 文件的小程序,因此我创建了两个 Dealer 类实例,然后将其添加到“dealerList”。

我尝试写入名为“Dealer.json”的 json 文件,因此我从名为“dealerList”的列表中读取对象,然后将其写入 json 文件。

public class Main {
    private static List<Dealer> dealerList = new ArrayList<>();

    public static void main(String[] args) {
            Dealer dearler = new Dealer("Chevrolet");
            dearler.addCartoDealer(new Cars("Camaro","Steve",11000));
            dearler.addCartoDealer(new Cars("Coverette","Jhon",22000));
            Dealer dearler1 = new Dealer("Ford");
            dearler1.addCartoDealer(new Cars("Ford1","Jessie",11000));
            dearler1.addCartoDealer(new Cars("Ford2","Smith",22000));
            dealerList.add(dearler);
            dealerList.add(dearler1);
            ObjectMapper mapper = new ObjectMapper();

            try(FileOutputStream newFile = new FileOutputStream("Dealer.json")){
               for(Dealer dealer:dealerList){
                  mapper.writeValue(newFile,dealer);
               }
            } catch (IOException e){
              e.printStackTrace();
            }
    }

我得到的堆栈:

java.io.IOException: Stream Closed
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:326)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2093)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.close(UTF8JsonGenerator.java:1137)
    at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3983)
    at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:3245)
    at com.Ayoub.Main.main(Main.java:26)

我得到了 Stream 关​​闭异常

最佳答案

我认为 Jackson 会在调用 writeValue 后自动关闭您的流。您可以通过以下方式关闭此功能:

MessagePackFactory messagePackFactory = new MessagePackFactory();
messagePackFactory.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
ObjectMapper objectMapper = new ObjectMapper(messagePackFactory);

不要忘记在某个时间点自己关闭流 ;-)

关于java - 如何修复流关闭异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57205187/

相关文章:

Java,获取两个日期之间的天数

Java 9 Zip End Header Not Found 异常

python - 文本差异 JSON

javascript - 如何使用父 id 将对象添加到嵌套的 javascript 对象

c++ - 如何在文本模式下安全地混合 std::ifstream 的 tellg、seekg 和 read(*,n) 方法

Netbeans 6.1 中的 Java bean 事件

java - String.valueOf(i) 与 ""+ i 或 i + ""

java - 将 json 简单库导入 Android Studio 时出错

c# - 使用 StreamWriter 写入 Stream(用于大 Stream 加密)

java - java IO 中的缓冲区如何工作?