亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未處理異常的看似虛假的錯誤消息

未處理異常的看似虛假的錯誤消息

婷婷同學_ 2022-10-26 17:05:55
這是代碼:import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.FileReader;import java.io.BufferedReader;import java.util.stream.Collectors;import java.io.FileWriter;import java.io.BufferedWriter;import java.util.List;public class CSVIO{    //read a file and return a list of records in the file    public static List<String[]> read(File f) throws IOException    {        BufferedReader br = new BufferedReader(new FileReader(f));        List<String[]> out = br.lines()                               .map( e -> e.split(","))                               .collect(Collectors.toList());        return out;    }    //write from a list of recrords into CSV format    public static void write(List<String[]> items, File dest) throws IOException    {        //return true if it successfully writes.            final BufferedWriter bw = new BufferedWriter(new FileWriter(dest));            items.stream()                 .map( row -> String.join(",",  row))                 .forEach( row  -> bw.write(row + "\n"));    }}我在運行時收到此錯誤消息:$ javac CSVIO.javaCSVIO.java:29: error: unreported exception IOException; must be caught or declared to be thrown                 .forEach( row  -> bw.write(row + "\n"));                                           ^1 error我已正確聲明 write 方法會引發異常。有什么我想念的嗎?
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

問題是,你br.write()拋出了異常。您必須在 lambda 表達式 ( .forEach()) 中捕捉到這一點:


items.stream()

     .map(row -> String.join(",",  row))

     .forEach( row  -> {

         try {

             bw.write(row + "\n");

         } catch (IOException e) {

             e.printStackTrace();

         }

     });

但是您可以使用以下方法縮短它Files.write():


public static void write(List<String[]> items, Path path) throws IOException {

    List<String> lines = items.stream()

            .map(row -> String.join(",", row))

            .collect(Collectors.toList());

    Files.write(path, lines);

}

您還可以使用以下方法簡化您的read方法Files.lines():


public static List<String[]> read(Path path) throws IOException {

    try (Stream<String> lines = Files.lines(path)) {

        return lines

                .map(e -> e.split(","))

                .collect(Collectors.toList());

    }

}


查看完整回答
反對 回復 2022-10-26
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號