美文网首页
利用Rxjava实现寻找Android存储卡jpg格式的文件

利用Rxjava实现寻找Android存储卡jpg格式的文件

作者: mcaotuman | 来源:发表于2017-04-25 20:08 被阅读88次
     private void getFiles(){
            String basePath = Environment.getExternalStorageDirectory().getPath();
            File rootFile = new File(basePath);
    
            Observable.just(rootFile)
                    // 遍历文件夹,通过flatMap转换为Observable<File>
                    .flatMap(new Func1<File, Observable<File>>() {
                        @Override
                        public Observable<File> call(File file) {
                            return listFiles(file);
                        }
                    })
                    // 筛选以.jpg结尾的文件
                    .filter(new Func1<File, Boolean>() {
                        @Override
                        public Boolean call(File file) {
                            return file.getName().endsWith(".jpg");
                        }
                    })
                    // 得到复合条件的文件名
                    .map(new Func1<File, String>() {
                        @Override
                        public String call(File file) {
                            return file.getName();
                        }
                    })
                    // 通过toList装到集合(如果不用toList,那就直接返回String,如果有1000条记录,那么onNext会执行1000次)
                    .toList()
                    // 通过订阅发送给观察者
                    .subscribe(new Observer<List<String>>() {
                        @Override
                        public void onCompleted() {
    
                        }
    
                        @Override
                        public void onError(Throwable e) {
    
                        }
    
                        @Override
                        public void onNext(List<String> s) {
                            Log.e("test","onNext "+ s.size());
                        }
                    });
        }
    
    // 遍历文件夹
        private Observable<File> listFiles(File file){
            if(file.isDirectory()){
                return Observable.from(file.listFiles()).flatMap(new Func1<File, Observable<File>>() {
                    @Override
                    public Observable<File> call(File file) {
                        return listFiles(file);
                    }
                });
            }else {
                return Observable.just(file);
            }
        }
    

    相关文章

      网友评论

          本文标题:利用Rxjava实现寻找Android存储卡jpg格式的文件

          本文链接:https://www.haomeiwen.com/subject/wicbzttx.html