文件筛选库(按照某固定类型筛选)

文件筛选库(按照某固定类型筛选)

FilePicker是一个Android版本的文件筛选库。
GitHub仓库地址

引入

gradle

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
//文件搜索公共库
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-searchfilelibrary:1.2.0'
//UI 公共库
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-common:1.2.0'
    //使用的三方库
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
//压缩包UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-rarpicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//文件夹UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-folderpicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//图片UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-imagepicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//视频UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-videopicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//音频UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-audiopicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//文档UI
implementation 'com.github.DL-ZhangTeng.FilePicker:filepicker-documentpicker:1.2.0'
    //使用的三方库
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
//或直接使用
implementation 'com.github.DL-ZhangTeng:FilePicker:1.2.0'
    //使用的三方库
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    implementation 'com.github.DL-ZhangTeng:RequestPermission:1.2.0'
    implementation 'com.github.DL-ZhangTeng:Utils:2.0.1'
    implementation('com.github.DL-ZhangTeng:BaseLibrary:2.0.1') {
        transitive false
    }

效果图

图片选择UI
RAR选择UI
文件夹选择UI

检索结果(只是用searchfilelibrary时)

获取检索结果提供了2种方式(具体可参照GitHub源码)
1、 public void getMediaList(int fileModel, Context context)
查找结果放于MediaStoreUtil相应的字段内;
MediaStoreUtil提供了数据改变监听解决办法,通过观察者模式向所有注册了MediaStoreListener的对象发送数据改变结果,
添加数据监听
public static void setListener(MediaStoreListener listener)
移除数据监听
public static void removeListener(int index)
public static void removeListener(MediaStoreListener listener)

2、 public void getMediaList(int searchId, Handler handler)
查找结果交给handler处理
Message message = new Message();
message.what = GetListCallbak.SUCCESS;
message.obj = list;
handler.sendMessage(message);

使用方法:开启服务根据需要调用服务的相应public方法

public class FolderPickerFragment extends Fragment {
    
    //...
     
     private void searchFile() {
          FileService.getInstance().getFileList(null);
          MediaStoreUtil.setListener(new MediaStoreUtil.FolderListener() {

               @Override
               public void onFolderChange(int imageCount, List<MediaEntity> folders) {
                    imageInfos.clear();
                    imageInfos.addAll(folders);
                    if (getActivity() == null) {
                         return;
                    }
                    getActivity().runOnUiThread(() -> folderPickerAdapter.notifyDataSetChanged());
               }
          });
     }
}

UI属性

属性名描述
multiSelect是否单选,默认true
maxSize配置开启多选时 最大可选择的图片数量。 默认:9
isShowCamera是否在第一格显示拍照或录制,默认true(只有图片视频音频有效)
filePath拍照以及截图后 存放的位置。 默认:/filePicker/FilePicker
provider文件提供者,默认com.zhangteng.searchfilelibrary.fileprovider
pathList已选择照片的路径
isOpenCamera是否直接开启相机或录制 默认:false(只有图片视频音频有效)
iconResourcesicon资源(可设置每种类型的icon,文档类型中pdf、txt、word、excel等可单独设置)

使用

  //使用UI(直接使用UI中的Fragment)
  public class FilePickerAdapter extends FragmentPagerAdapter {
    private String[] titles = {"image", "video", "audio", "rar", "document", "folder"};
    private ArrayList<Fragment> fragmentlist = new ArrayList<Fragment>();

    public FilePickerAdapter(FragmentManager fm) {
        super(fm);
    }

    public ArrayList<Fragment> getFragmentlist() {
        return fragmentlist;
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new ImagePickerFragment();
                break;
            case 1:
                fragment = new VideoPickerFragment();
                break;
            case 2:
                fragment = new AudioPickerFragment();
                break;
            case 3:
                fragment = new RarPickerFragment();
                break;
            case 4:
                fragment = new DocumentPickerFragment();
                break;
            case 5:
                fragment = new FolderPickerFragment();
                break;
            default:
                break;
        }
        fragmentlist.add(fragment);
        return fragment;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public int getCount() {
        return titles.length;
    }
}

  //使用UI(直接使用UI中的Activity)
    //  startActivity(new Intent(this, ImagePickerActivity.class));
    //  startActivity(new Intent(this, VideoPickerActivity.class));
    //  startActivity(new Intent(this, AudioPickerActivity.class));
    //  startActivity(new Intent(this, RarPickerActivity.class));
    //  startActivity(new Intent(this, DocumentPickerActivity.class));
    //  startActivity(new Intent(this, FolderPickerActivity.class));
  //使用UI时-文件选择回调
    //public class HandlerCallBack implements IHandlerCallBack {
    //    private String TAG = "---ImagePicker---";
    //
    //    @Override
    //    public void onStart() {
    //        Log.i(TAG, "onStart: 开启");
    //    }
    //
    //    @Override
    //    public void onSuccess(List<MediaEntity> audioList) {
    //        Log.i(TAG, "onSuccess: 返回数据");
    //    }
    //
    //    @Override
    //    public void onCancel() {
    //        Log.i(TAG, "onCancel: 取消");
    //    }
    //
    //    @Override
    //    public void onFinish(List<MediaEntity> selectAudio) {
    //        Log.i(TAG, "onFinish: 结束");
    //    }
    //
    //    @Override
    //    public void onError() {
    //        Log.i(TAG, "onError: 出错");
    //    }
    //
    //    @Override
    //    public void onPreview(List<MediaEntity> selectAudio) {
    //        Log.i(TAG, "onPreview: 预览");
    //    }
    //}
    //
    //  FilePickerConfig.getInstance()
    //          .iHandlerCallBack(new com.zhangteng.common.callback.HandlerCallBack() {
    //              @Override
    //              public void onFinish(List<MediaEntity> mediaEntities) {
    //                  super.onFinish(mediaEntities);
    //                       
    //              }
    //          });
  //使用UI时-修改文件图标
    //  FilePickerConfig.getInstance()
    //                .iconResources(MediaEntity.MEDIA_IMAGE, R.drawable.jpg)
    //                .iconResources(MediaEntity.MEDIA_AUDIO, R.drawable.audio)
    //                .iconResources(MediaEntity.MEDIA_VIDEO, R.drawable.video)
    //                .iconResources(MediaEntity.MEDIA_DOCUMENT, R.drawable.text)
    //                .iconResources(MediaEntity.MEDIA_ZIP, R.drawable.yasuo)
    //                .iconResources(MediaEntity.MEDIA_PDF, R.drawable.pdf)
    //                .iconResources(MediaEntity.MEDIA_DOC, R.drawable.word)
    //                .iconResources(MediaEntity.MEDIA_PPT, R.drawable.ppt)
    //                .iconResources(MediaEntity.MEDIA_EXCEL, R.drawable.excel)
    //                .iconResources(MediaEntity.MEDIA_TXT, R.drawable.text)
    //                .iconResources(MediaEntity.MEDIA_APK, R.drawable.yasuo)
    //                .iconResources(MediaEntity.MEDIA_FOLDER, R.drawable.wenjian)
    //                .iconResources(MediaEntity.MEDIA_UNKNOWN, R.drawable.weizhi);
  //使用UI时-修改底部功能条
    //在自己的layout文件加下新建
    //file_picker_layout_upload.xml
    //在功能条layout中添加3个TextView样式自定义id分别为
    //file_picker_tv_preview、file_picker_tv_selected、file_picker_tv_upload

混淆

-keep public class com.zhangteng.**.*{ *; }

历史版本

版本更新更新时间
v1.2.0使用独立的Utils库2022/9/2 at 20:50
v1.1.1使用最新版本三方库2022/6/30 at 11:19
v1.1.0迁移到AndroidX、使用base库utils2022/1/26 at 14:28
v1.0.3返回选中的MediaEntity列表,配置类使用单例模式删除建造者模式2020/9/16 0016 at 下午 15:26
v1.0.2添加权限请求2020/9/16 0016 at 上午 11:38
v1.0.1样式自定义2020/9/8 0008 at 下午 17:58

赞赏

如果您喜欢FilePicker,或感觉FilePicker帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢

联系我

邮箱:763263311@qq.com/ztxiaoran@foxmail.com

License

Copyright © [2020] [Swing]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

使用说明 : 1、本程序可以作什么? 本程序功能分为两个部分: 一部分是:批量查找指定路径下的文件中的内容中,是否包含要查询的项目。并把查询出的内容分文件存储。 一部分是:将文本文件导入EXCEL中,可以将上一步查找的结果导入,也可以自己选择文件导入(支持多选)。 2、如何使用他? a、批量查找: 首先,在“读入位置”按钮处设置你所要读取的文件的存放位置,此时程序会自动读入此文件夹下所有文件,以供选择;其次,用“>>”或“>”将要读取的文件选入读取队列,当然如果选错了可以用“<<”或“<”删除队列,或者鼠标双击选中项删除;再次,点击“+”按钮,添加查找项目到查找项目列表,一次只可以添加一条,如需添加多条则需要重复添加操作;如果添加错误可以双击选中项删除或选中后点击“-”按钮。最后,点击“开始查找”,程序将会把查找结果输出保存到指定路径下面的output文件夹下面,你可以选择是否打开目录查看。如果需要查询的文件文件头,可以选择“保留文件首行”。 b、EXCEL导入: 首先,选择导入方式,导入方式分为“查询结果导入”和“新选文件导入”两种;当选择“查询结果导入”时,本程序将把“读入位置”处“output”文件夹下文件批量导入EXCEL。当选择“新选文件导入”时,本程序在点击“开始导入”时将弹出窗口,您可以自己选择需要导入文件(支持多选),导入EXCEL。其次,设置导入文件时的分割符,默认为“|”,本程序只支持按照分隔符导入。最后,点击“开始导入”按钮开始导入。 3、本程序不判断所查找的文件类型 由于本程序在读入文件时,并没有校验文件的内容和文件类型,因此本程序会读取用户所选择的任意文件,即使此文件是二进制格式的。不论是查询或者是导入功能都是这样。本程序将按行读取所选择文件(或者有换行符的),在读取完文件后,无论是否找到,都会创建和源文件相同类型文件,即使是.exe或.rar(一般是打不开的),文件名存储为“output”+原文件名。即使没有找到任何相匹配的内容,本程序也会创建文件,这时后文件大小是0字节,可以按照大小排列看到。 4、请使用“清除文件”按钮及时清除查询结果 程序在查询和创建文件的过程中,不会判断是否已经执行过查询操作。如果已经执行过查询操作,“output”文件夹下就会存在查询出的文件,当再次执行查询时,本程序会在已存在的文件后追加查询结果。这样就会出现重复的记录或内容。因此,当需要多次查询时,每次查询前需要点击“清空文件”按钮删除output文件夹,才能保证查找的准确。 5、本程序不会判断运行的环境,因此在运行过程中可能会有些未知的错误 本程序在win7环境,vs2012,Netframe4.0下编译通过。本程序支持winxp及以上操作系统。执行EXCEL导入的时候,需要安装Office。Office的版本在2003以上就可以。但是不同我Office版本对导入性能,有一定的影响。Excel2003,最多256列,即2的8次方,最多65536行,即2放入16次方; Excel2007及以上版本,最多16384列,即2的14次方,最多1048576行,即2的20次方。因此如果需要导入的单个文件的行数或者列数,超过了所安装Office版本的最多行列数,程序将会报错!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值