【问题标题】:How do I change this so it fails the way I want?我该如何改变它,让它按照我想要的方式失败?
【发布时间】:2017-06-07 01:22:53
【问题描述】:

如果遇到任何错误,我认为以下代码会停止,句号。

public static void exportDatapointsToCSV(List<Datapoint> datapointList, File exportDir) {

    SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy (h:mm a)", Locale.US);
    File file = new File(exportDir, "my_datapoints.csv");

    try {
        file.createNewFile();
        CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
        csvWrite.writeNext(new String[]{"DATAPOINT_LABEL", "VALUE", "TIMESTAMP", "TIMESTAMP_FORMATTED", "NOTE"});

        for (Datapoint datapoint : datapointList) {
            String arrStr[] = new String[]{
                    datapoint.getLabel(),
                    datapoint.getValue() + "",
                    datapoint.getTimestamp() + "",
                    sdf.format(new Date(datapoint.getTimestamp())) + "",
                    datapoint.getNote()
            };
            csvWrite.writeNext(arrStr);
        }
        csvWrite.close();
    }
    catch (Exception sqlEx) {
        Log.e(LOG_TAG, sqlEx.getMessage(), sqlEx);
    }
}

但我希望它:

  1. 如果无法创建开始的文件,则抛出错误并停止。

  2. 如果它在给定的行上遇到错误,记录它但移动到下一行,而不是停止整个事情。

我只是将 try/catch 移到循环中吗?这包括它吗?

【问题讨论】:

  • 更改 catch (Exception sqlEx) { 以对某些 Exceptions 执行某些操作 在某些代码周围移动 try/catch
  • @ScaryWombat 你到底是什么意思?我不确定所有这些“确定”是什么
  • 查看我的回答以获得更多帮助
  • 您不必将所有内容都包装到一个巨大的 try/catch 块中。您总是可以进行更精细的异常处理。将 createNewFilewriteNext 包装到它们自己的 try/catch 块中。
  • @tsolakp 那么嵌套的 try/catch 块?外一抛IOException,内一抛异常?

标签: java file csv error-handling opencsv


【解决方案1】:

您捕获的异常是所有异常的祖父 - 如果您查看 javadocs,您会看到构造函数 new FileWriter(file) 抛出 IOException

所以如果你想要 某些 行动,例如如果失败则记录并退出然后尝试

 CSVWriter csvWrite = null;
 try {
         csvWrite = new CSVWriter(new FileWriter(file));
 } catch (IOException ex) {
    Log.e(LOG_TAG, ex.getMessage(), ex);
    return; // or System.exit or what either
 }

【讨论】:

  • 这里的错误应该怎么做?将它们显示给用户还是只是默默地将它们转储到文件中?
  • 我对您的申请一无所知。如果你默默地甩掉它们,用户会有什么感受?
【解决方案2】:

如果我在代码中正确显示会更好:

public static void exportDatapointsToCSV(List<Datapoint> datapointList, File exportDir) {

    SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy (h:mm a)", Locale.US);

    File file = null;
    try{ ( file = new File(exportDir, "my_datapoints.csv") ).createNewFile(); }
    catch(IOException e){throw new RuntimeException(e); }

    CSVWriter csvWrite = null;
    try {
        csvWrite = new CSVWriter(new FileWriter(file));
        csvWrite.writeNext(new String[]{"DATAPOINT_LABEL", "VALUE", "TIMESTAMP", "TIMESTAMP_FORMATTED", "NOTE"});

        for (Datapoint datapoint : datapointList) {
            String arrStr[] = new String[]{
                    datapoint.getLabel(),
                    datapoint.getValue() + "",
                    datapoint.getTimestamp() + "",
                    sdf.format(new Date(datapoint.getTimestamp())) + "",
                    datapoint.getNote()
            };
            try{ csvWrite.writeNext(arrStr); }
            catch(Exception e){LOG.error(e);}
        }
    }
    catch (Exception sqlEx) {
        Log.e(LOG_TAG, sqlEx.getMessage(), sqlEx);
    }finally{
       if (csvWrite != null){
           csvWrite.close();
       }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多