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

article/2023/6/4 14:27:51

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

public class ReadLocalFileActivity extends AppCompatActivity {private ListView listView;private List<File> files = new ArrayList<>();private ArrayAdapter adapter;@Overrideprotected 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() {@Overridepublic 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>>() {@Overridepublic Observable<File> apply(@NonNull File file) throws Exception {return listFiles(file);}}).filter(new Predicate<File>() {@Overridepublic boolean test(@NonNull File file) throws Exception {return file.getName().endsWith(".txt");}}).toList().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io())// 通过订阅发送给观察者.subscribe(new Consumer<List<File>>() {@Overridepublic void accept(List<File> s) throws Exception {files.addAll(s);adapter.notifyDataSetChanged();}}, new Consumer<Throwable>() {@Overridepublic 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>>() {@Overridepublic Observable<File> apply(@NonNull File file) throws Exception {return listFiles(file);}});} else {return Observable.just(file);}}
}

layout布局就是一个简单的listview

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


https://www.dgrt.cn/a/2089210.html

相关文章

CUDA矩阵转置(共享内存 tile)

Udacity的CUDA编程课程中介绍了CUDA实现矩阵转置的六种方式&#xff0c;本文介绍其中的一种方式 如果矩阵为N*N的方阵。该方式让每个线程处理一个矩阵元素&#xff0c;总共需要N*N个线程。首先&#xff0c;声明两个常量并配置blocks&#xff0c;threads&#xff1a; const in…

Visual Studio Code 配置java开发环境

最近在学习算法&#xff0c;有时需要在自己的机器上调试一下代码。有些算法题目的题解是用java编的&#xff0c;因为这类代码只是单个的java文件&#xff0c;所以不想动用MyEclipse那样的重型工具。正好机器上有一个轻量级的VS Code&#xff0c;我就试着在上面搭了一个java开发…

nyoj97兄弟郊游问题

时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述兄弟俩骑车郊游&#xff0c;弟弟先出发&#xff0c;每分钟X米&#xff0c;M分钟后&#xff0c;哥哥带一条狗出发。以每分钟Y米的速度去追弟弟&#xff0c;而狗则以每分钟Z米的速度向弟弟跑去…

isPrime 判断素数的函数

c语言中int isPrime(int n)是什么意思 isPrime 是自定义的一个函数&#xff0c;传入一个整数n&#xff0c;判断是否为素数。若是返回1&#xff0c;否则返回0。 #include "stdio.h"int isprime(int a) //判断素数的函数{int j;for(j2;j<a;j)if(a%j0) //如果有因数…

isPrime 判断素数的函数

c语言中int isPrime(int n)是什么意思 isPrime 是自定义的一个函数&#xff0c;传入一个整数n&#xff0c;判断是否为素数。若是返回1&#xff0c;否则返回0。 #include "stdio.h" int isprime(int a) //判断素数的函数 {int j;for(j2;j<a;j)if(a%j0) //如果有因…

输入四个整数,找出其中的最大值,用函数的嵌套调用来处理

输入四个整数&#xff0c;找出其中的最大值&#xff0c;用函数的嵌套调用来处理 #include<stdio.h> int main() {int max4(int a,int b,int c,int d);int a,b,c,d,max;scanf("%d%d%d%d",&a,&b,&c,&d);maxmax4(a,b,c,d);printf("max%d\n&q…

Fibonacci Again!

Fibonacci Again! 时间限制: 1 Sec 内存限制: 128 MB题目描述 求第n个斐波那契数是否是一个素数,n为整数f[n]f[n-1]f[n-2] (2<n<30)f[1]3,f[2]7输入 输入整数m,0<m<30,输入-1表示结束输入输出 如果f[m]是素数 则输出Yes,否则输出No,每行输出占一行。样例输入 23-1…

XYNU OJ 1073: 习题5-3-2 求最大公约数

题目描述 输入两个正整数&#xff0c;求其最大公约数。输入 测试数据有多组&#xff0c;每组输入两个正整数&#xff0c;两个正整数之间以空格分隔。输出 对于每组输入,输出其最大公约数。 每组对应一个输出&#xff0c;单独占一行。 样例输入 14 4921 66样例输出 73#include&l…