2012-01-14 38 views

回答

17
io.Source.fromFile("file.txt").getLines.size 

注意getLines返回Iterator[String]这样你就不会实际读取整个文件到内存中。

+1

这是完美的,谢谢!!!! – dave 2012-01-14 22:29:42

+2

类似于[其他问题](http://stackoverflow.com/q/8865434/115478)的答案,这也会泄漏文件描述符。 – leedm777 2012-01-16 05:30:03

0
val source = Source.fromFile(new File("file")).getLines 
var n = 1 ; while (source.hasNext) { printf("%d> %s", n, source.next) ; n += 1 } 


val source = Source.fromFile(new File("file")).getLines 
for ((line, n) <- source zipWithIndex) { printf("%d> %s", (n + 1), line) } 
3

another answer I posted恶癖:

def lineCount(f: java.io.File): Int = { 
    val src = io.Source.fromFile(f) 
    try { 
    src.getLines.size 
    } finally { 
    src.close() 
    } 
} 

或者,使用scala-arm

import resource._ 

def firstLine(f: java.io.File): Int = { 
    managed(io.Source.fromFile(f)) acquireAndGet { src => 
    src.getLines.size 
    } 
}