Im folgenden Code lese ich Nr. von Zeilen aus einer Datei. Wenn etwas schief geht, schließe ich den Dateizeiger. Aber wie kann ich herausfinden, ob f
gültigen Zeiger enthält oder nicht?Schließen von Dateizeiger in Scala in Endlich
def countLines(filename:String):Option[Int] = {
try{
val f = Source.fromFile(filename)
println(s"no. of lines ${f.getLines().size}")
Some(f.getLines.size)
} catch {
case ex: FileNotFoundException => {
println(s"file ${filename} not found")
None
}
} finally {
//f might not be a valid pointer depending on when the error occured
}
}
Das Buch lese ich bin verwendet var
Zustand zu halten (wenn f
gültig ist oder nicht), aber ich versuche, es zu benutzen nur unveränderliche Variablen aus Gründen zu vermeiden.
def countLines(filename:String):Option[Int] = {
var f:Option[Source] = None
try{
f = Some(Source.fromFile(filename))
println(s"no. of lines ${f.get.getLines().size}")
Some(f.get.getLines.size)
} catch {
case ex: FileNotFoundException => {
println(s"file ${filename} not found")
None
}
} finally {
for(i<-f){
println("closing file")
i.close()
}
}
}
Gibt es irgendeinen Grund, dass Sie versuchen müssen, einen Versuch/catch/finally blockiert, anstatt ein Try-Objekt? oder wäre letzteres akzeptabel? –