我该如何更改它以使其按照我想要的方式失败?

How do I change this so it fails the way I want?

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

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 移动到循环中吗?这涵盖了吗?

您正在捕获的异常是所有异常的祖父 - 如果您查看 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
 }

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

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