java - 我可以在不切换到显式迭代器的情况下处理 for-each 循环中的异常吗?

标签 java for-loop foreach exception

我正在使用htsjdk SamReader类如下:

try(
    SamReader reader = SamReaderFactory.makeDefault().open(new File(filename))
){
    for(SAMRecord record : reader){ // potential exception here, based on file input
        // process record
    }
}
catch(SAMFormatException e){
    // rest of loop is skipped by handling exception here
}

SamReader 类基本上从文本文件中读取数据,并从文本文件中的每一行生成一个新的 SAMRecord。 SamReader 类对文件中的每一行执行检查,并可能引发运行时 SAMFormatException。我可以处理这个异常,但我还没有找到一种方法来使用 for-each 循环处理它,同时仍然尝试处理文件的其余部分。

有没有办法在使用 for-each 循环格式时处理运行时异常并继续处理文件的其余部分?或者我是否需要显式使用迭代器来控制它?

最佳答案

将 try catch 放入循环内

SamReader reader = SamReaderFactory.makeDefault().open(new File(filename));

for(SAMRecord record : reader){ 
    try {
    // process record
    } catch(SAMFormatException e) {
        // handle exception
    }
}

或者 - 正如您所解释的,迭代时抛出异常 - 您使用 iterator()

来使用更低级的 api 方式
Iterator<SAMRecord> it = reader.iterator()
while(it.hasNext()) {
    try {
        SAMRecord record = it.next();
        // process record
    } catch(SAMFormatException e) {
        // do handling here
    }
}

关于java - 我可以在不切换到显式迭代器的情况下处理 for-each 循环中的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517096/

相关文章:

for-loop - 用 Octave 编写 'for' 的更简单方法

java - 设计一个循环调用函数的程序

foreach - Blade 不显示数据库中的模型值

java - virtuoso-opensource : using jenaprovider, 如何从文件而不是从 URL 读取数据?

java - 索引意外越界

java - 字符串操作每 4 个字符插入一个字符

java - java中是否有 "NameValueCollection"和 "CultureInfo"类的等价物?

c - 将数字添加到网格 C

c++ - 如何在 C++ 的一个项目中访问所有具有相同类型/类的对象?

php - 使用 foreach 循环插入 MySQL 表中的重复记录集