scala 遍历目录 空指针异常和OutOfMemoryError:

本文介绍了一种使用Scala语言实现的文件遍历及读取的方法。通过递归函数`walk`遍历指定目录下的所有文件,并打印文件名;通过`readfiles`函数遍历并读取文件内容,将数据保存到数组中。文章还讨论了使用`toBuffer`而非`toArray`的原因,以避免内存溢出问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遍历目录并打印文件名:

def walk(file:File){

 if (file.isFile)println(file.getName)else file.listFiles.foreach(walk)

}

以上程序执行完后会报空指针异常,修改如下:

def walk(file:File){
 if (file.isFile)println(file.getName)else if (file.isDirectory)file.listFiles.foreach(walk)
}


遍历目录并读取所有文件,保存到数组中:
var data = ArrayBuffer[String]()
def readfiles(file:File){
 if (file.isFile){
         var liness =Source.fromFile(file,"UTF-8").getLines().toBuffer            
         while(liness!=null){data++=liness}
        }else if (file.isDirectory)file.listFiles.foreach(readfiles)
}
 注意,toBuffer如果改成toArray会报告java.lang.OutOfMemoryError: Java heap space。原因是Array不可改变长度。

readfiles(new File("/home/zsm/test/file2"))
for (a<-data)println(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值