首页 > 编程语言 >Android使用Rxjava获取本地存储的txt文件

Android使用Rxjava获取本地存储的txt文件

时间:2023-08-10 17:03:39浏览次数:42  
标签:File Override Intent file Rxjava new Android txt public

废话不多说,直接上代码:

public class ReadLocalFileActivity extends AppCompatActivity {

    private ListView listView;

    private List<File> files = new ArrayList<>();

    private ArrayAdapter adapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_loacal_file);
        listView = findViewById(R.id.lv_file);
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, files);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String absolutePath = files.get(position).getAbsolutePath();
                Log.i("lala","=position=>" + position + "   absolutePath==>" + absolutePath);

                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

                File file = files.get(position);//这是.txt文件
                Uri contentUri = FileProvider
                        .getUriForFile(ReadLocalFileActivity.this,
                        getPackageName()+".read_txt_provider", file);
                intent.setDataAndType(contentUri,   "text/plain");
                startActivity(intent);

            }
        });

        getLocalFileData();
    }

    @SuppressLint("CheckResult")
    private void getLocalFileData() {
        String basePath = Environment.getExternalStorageDirectory().getPath();
        File rootFile = new File(basePath);
        boolean exists = rootFile.exists();
        if (!exists){
            adapter.notifyDataSetChanged();
            return;
        }

        Observable.just(rootFile)
                .flatMap(new Function<File, Observable<File>>() {
                    @Override
                    public Observable<File> apply(@NonNull File file) throws Exception {
                        return listFiles(file);
                    }
                })
                .filter(new Predicate<File>() {
                    @Override
                    public boolean test(@NonNull File file) throws Exception {
                        return file.getName().endsWith(".txt");
                    }
                })
                .toList()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                // 通过订阅发送给观察者
                .subscribe(new Consumer<List<File>>() {
                    @Override
                    public void accept(List<File> s) throws Exception {
                        files.addAll(s);
                        adapter.notifyDataSetChanged();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.e("lala","=throwable==>" + throwable.getMessage());
                    }
                });
    }

    private Observable<File> listFiles(File file) {
        if (file.isDirectory()) {
            return Observable.fromArray(file.listFiles())
                    .flatMap(new Function<File, Observable<File>>() {
                        @Override
                        public Observable<File> apply(@NonNull File file) throws Exception {
                            return listFiles(file);
                        }
                    });
        } else {
            return Observable.just(file);
        }
    }
}

layout布局就是一个简单的listview

<-----------end----------->

标签:File,Override,Intent,file,Rxjava,new,Android,txt,public
From: https://blog.51cto.com/u_16221526/7037560

相关文章

  • Android屏幕适配全攻略(最权威的官方适配指导)
    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因、重要概念、解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! Android屏幕适配出现的原因重要概念屏幕尺寸屏幕......
  • Android应用如何支持屏幕多尺寸多分辨率问题
    作为Android应用程序开发者都知道android是一个“碎片化”的世界。多种系统版本、多种尺寸、多种分辨率、多种机型,还有不同的厂商定制的不同ROM,你开发的应用会在不可预期的手机上报错。这给开发适配带来不小的难度。这篇文章会告诉我们怎么解决这个问题。 1、Android碎片化1.1......
  • Android Binder 学习(一) 系统服务的Binder 是如何管理的
    Binder是什么?小编的个人理解1.对于系统来说,Binder类似于血管,链接这ServiceManangerActivityManagerServiceActivityTaskManagerService,承载着他们之间的信息的传递2.对于kernel底层来说,binder是驱动,是一种虚拟的底层驱动3.对于Java应用层来说,他是一个封装了一套序......
  • Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
    仿照微信,朋友圈分享图片功能。可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片。很不错的源码,大家有需要可以下载看看。微信微信微信微信下载地址: 微信上传图片源码很多网友不知道怎么获取图片路径,这里贴出......
  • awesome-android-ui
    https://github.com/wasabeef/awesome-android-ui SkiptocontentSignup Signin ThisrepositoryExploreFeaturesEnterpriseBlog   Star3,934 Fork526wasabeef/awesome-android-uiCode......
  • python语言--------csv模块将txt文件转换为表格csv格式
    上代码:importcsvcsvFile=open("C:/Users/Administrator/Desktop/1.csv",'w',newline='',encoding='utf-8')writer=csv.writer(csvFile)csvRow=[]f=open("C:/Users/Administrator/Desktop/np.txt",'r'......
  • C99 Clion 项目目录结构 CMakeLists.txt
    简单helle目录如下.├──CMakeLists.txt├──hello│  └──hello.c└──main.cmain.c#include"hello//hello.c"intmain(){print_hello();return0;}hello.c#include<stdio.h>staticvoidprint_hello();voidprint_hello(){pr......
  • stm32 f103c8 clion 引入标砖库 CMakeLists.txt
    使用ClionIDE开发stm32使用标准库可以使用qemu代替开发版使用CMakeLists.txt编译项目set(CMAKE_SYSTEM_NAMEGeneric)set(CMAKE_SYSTEM_VERSION1)cmake_minimum_required(VERSION3.26)set(CMAKE_C_COMPILERarm-none-eabi-gcc)set(CMAKE_CXX_COMPILERarm-no......
  • [Android] wifi管理之WifiManager
    1.WifiManager简介WifiManager是Android系统中负责管理WiFi网络的一个重要服务。它提供了一系列方法,允许开发者搜索、连接、保存、删除WiFi网络,还可以获取当前WiFi的连接状态、信号强度等信息。主要功能:连接到一个特定的WiFi网络:你可以使用WifiManager的addNetwork(WifiConfigurat......
  • Android TTS学习——继续爱的表白(转)
    一. 简单介绍在上一篇里 我们讲到了TTS 最主要的一个APIpublicintspeak(String   text,intqueueMode,   HashMap<String,   String>params)其中我们介绍了前两个参数,第三个参数设置了null而且我们在介绍AndroidTTS 提供的功能时,说到TTS 提供了两个接口,第......