java 8 使用Lambdas, Paths and Files

Java 8引入了Lambda表达式,流式的API,这里可以用这个新的东东来遍历文件夹。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import  org.apache.commons.logging.Log ;
import  org.apache.commons.logging.LogFactory ;

import  java.io.IOException ;
import  java.nio.charset.Charset ;
import  java.nio.file.FileVisitOption ;
import  java.nio.file.Files ;
import  java.nio.file.Path ;
import  java.nio.file.Paths ;
import  java.util.ArrayList ;
import  java.util.List ;
import  java.util.stream.Stream ;

/**
 * RecursiveFileLineReader
 * Created by Brian on 2014-05-26.
 */

public  class RecursiveFileLineReader  {

     private  transient  static  final Log LOG  = LogFactory. getLog (RecursiveFileLineReader. class ) ;

     /**
     * 取得所有指定扩展名的文件的非空行
     * @param path      the path to start recursion
     * @param extension the file extension
     * @return list of lines
     */

     public  static List <String > readAllLineFromAllFilesRecursively ( final  String path,  final  String extension )  {
         final List <String > lines  =  new ArrayList <> ( ) ;
         //对于所有的文件
         try  ( final Stream <Path > pathStream  = Files. walk (Paths. get (path ), FileVisitOption. FOLLOW_LINKS ) )  {
             //过滤出文件以及给定的扩展名
            pathStream
                    . filter ( (p )  ->  !p. toFile ( ). isDirectory ( )  && p. toFile ( ). getAbsolutePath ( ). endsWith (extension ) )
             //对每一个文件 读取每行的内容
                    . forEach (-> fileLinesToList (p, lines ) ) ;
         }  catch  ( final  IOException e )  {
            LOG. error (e. getMessage ( ), e ) ;
         }
         return lines ;
     }

     private  static  void fileLinesToList ( final Path file,  final List <String > lines )  {
         try  (Stream <String > stream  = Files. lines (file, Charset. defaultCharset ( ) ) )  {
             //只读取非空行,加入到lines中
            stream
                    . map ( String ::trim )
                    . filter (->  !s. isEmpty ( ) )
                    . forEach (lines ::add ) ;
         }  catch  ( final  IOException e )  {
            LOG. error (e. getMessage ( ), e ) ;
         }
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值