2017-02-28 1 views
0

ich die htsjdk SamReader Klasse bin mit wie folgt:Kann ich Exceptions in for-each-Schleife behandeln, ohne zu explizitem Iterator zu wechseln?

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 
} 

Die SamReader Klasse im Grunde liest aus einer Textdatei und erzeugt eine neue SAMRecord aus jeder Zeile in der Textdatei. Die SamReader-Klasse überprüft jede Zeile in der Datei und kann eine Laufzeit-SAMFormatException auslösen. Ich kann diese Ausnahme behandeln, aber ich habe keine Möglichkeit gefunden, mit der for-each-Schleife umzugehen, während ich versuche, den Rest der Datei zu verarbeiten.

Gibt es eine Möglichkeit, die Laufzeitausnahme zu behandeln, während das for-each-Schleifenformat verwendet wird und der Rest der Datei weiter verarbeitet wird? Oder muss ich explizit einen Iterator verwenden, um die Kontrolle darüber zu bekommen?

Antwort

1

Setzen Sie den Try-Catch innerhalb die Schleife

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

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

Oder - wie Sie die Ausnahme von geworfen erklärt wird, während Iterieren - Sie verwenden eine niedrige api Weise mit iterator()

Iterator<SAMRecord> it = reader.iterator() 
while(it.hasNext()) { 
    try { 
     SAMRecord record = it.next(); 
     // process record 
    } catch(SAMFormatException e) { 
     // do handling here 
    } 
} 
+0

Dies funktioniert nicht, da die Ausnahme beim Generieren des SAMRecord-Datensatzes ausgelöst wird und nicht während der Verarbeitung. – mattm

+0

@mattm hat eine Lösung mit Iterator hinzugefügt –

+0

Danke für die Lösungsskizze, aber ich bin eigentlich mehr daran interessiert, ob diese Art der Ausnahmebehandlung mit der for-each-Schleife möglich ist oder ob der Iterator-Ansatz notwendig ist. – mattm

Verwandte Themen