如何修复流关闭异常

时间:2019-07-25 15:08:14

标签: java json stream

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

我试图写到名为“ Dealer.json”的json文件中,所以我要从名为“ dealerList”的列表中读取对象,然后将其写入json文件。

...
BEGIN
  CASE
    WHEN TYPE = 'APPLE' AND COLORS(1) = 'RED' THEN
      RETURN LOCATIONS(1);
    WHEN TYPE = 'APPLE' AND COLORS(1) = 'YELLOW' THEN
      RETURN LOCATIONS(2);
    ELSE
      RETURN 'UNKNOWN';
  END CASE;
END;
/

我得到的堆栈:

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();
            }
    }

我得到了Stream的闭门造车权

2 个答案:

答案 0 :(得分:1)

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

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

别忘了在某个时间点自己关闭流;-)

答案 1 :(得分:0)

刚刚发现它应该添加:

JsonFactory jsonFactory = new JsonFactory();
jsonFactory.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET,false);
ObjectMapper mapper = new ObjectMapper(jsonFactory);