Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法

下面是实现读取SD卡下所有TXT文件名并用listView显示出来的方法的攻略:

  1. 确认权限

首先我们需要在AndroidManifest.xml中添加读取SD卡权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 获取SD卡目录

获取SD卡的根目录路径:

String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
  1. 遍历TXT文件

遍历SD卡下所有的TXT文件,获取文件名并添加到List中:

File sdCardFolder = new File(sdCardPath);
List<String> txtFileList = new ArrayList<>();
if (sdCardFolder.exists() && sdCardFolder.isDirectory()) {
    File[] files = sdCardFolder.listFiles();
    for (File file : files) {
        if (file.isFile() && file.getName().endsWith(".txt")) {
            txtFileList.add(file.getName());
        }
    }
}
  1. 绑定ListView

将txtFileList绑定到ListView上:

ListView listView = findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, txtFileList);
listView.setAdapter(adapter);

下面是完整的代码示例:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        File sdCardFolder = new File(sdCardPath);
        List<String> txtFileList = new ArrayList<>();
        if (sdCardFolder.exists() && sdCardFolder.isDirectory()) {
            File[] files = sdCardFolder.listFiles();
            for (File file : files) {
                if (file.isFile() && file.getName().endsWith(".txt")) {
                    txtFileList.add(file.getName());
                }
            }
        }

        ListView listView = findViewById(R.id.listView);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, txtFileList);
        listView.setAdapter(adapter);
    }
}

另外,可以参考以下两个示例:

  1. 按钮触发读取:
public class MainActivity extends AppCompatActivity {

    private List<String> txtFileList = new ArrayList<>();
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, txtFileList);
        ListView listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                readTxtFile();
            }
        });
    }

    private void readTxtFile() {
        String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        File sdCardFolder = new File(sdCardPath);
        if (sdCardFolder.exists() && sdCardFolder.isDirectory()) {
            File[] files = sdCardFolder.listFiles();
            txtFileList.clear();
            for (File file : files) {
                if (file.isFile() && file.getName().endsWith(".txt")) {
                    txtFileList.add(file.getName());
                }
            }
            adapter.notifyDataSetChanged();
        }
    }
}
  1. 添加文件长按事件:
public class MainActivity extends AppCompatActivity {

    private List<String> txtFileList = new ArrayList<>();
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, txtFileList);
        ListView listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                String fileName = txtFileList.get(position);
                deleteFileDialog(fileName);
                return true;
            }
        });

        readTxtFile();
    }

    private void readTxtFile() {
        String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        File sdCardFolder = new File(sdCardPath);
        if (sdCardFolder.exists() && sdCardFolder.isDirectory()) {
            File[] files = sdCardFolder.listFiles();
            txtFileList.clear();
            for (File file : files) {
                if (file.isFile() && file.getName().endsWith(".txt")) {
                    txtFileList.add(file.getName());
                }
            }
            adapter.notifyDataSetChanged();
        }
    }

    private void deleteFileDialog(final String fileName) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("删除文件");
        builder.setMessage("是否删除:" + fileName);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
                File file = new File(sdCardPath, fileName);
                if (file.exists()) {
                    file.delete();
                    readTxtFile();
                }
            }
        });
        builder.setNegativeButton("取消", null);
        builder.show();
    }
}

希望能够对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法 - Python技术站

(1)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • zeromq rpc原型

    下面是 ZeroMQ RPC 原型的完整攻略,包括定义、使用方法和两个示例说明。 ZeroMQ RPC 原型的定义 ZeroMQ RPC 原型是一种基于 ZeroMQ 的远程过程调用(RPC)框架,它可以帮助开发人员快速构建分布式应用程序。ZeroMQ RPC 原型使用 ZeroMQ 的套接字进行通信,支持多种消息传输模式,如请求-响应、发布-订阅、推送-拉…

    other 2023年5月5日
    00
  • 修改服务器配置,让asp.net文件后缀名随心所欲

    修改服务器配置,让asp.net文件后缀名随心所欲 如果你想修改服务器配置,让ASP.NET文件的后缀名随心所欲,你可以按照以下步骤进行操作: 打开IIS管理器:首先,打开Internet Information Services (IIS)管理器。你可以在Windows操作系统中的“控制面板”或者通过运行命令inetmgr来打开IIS管理器。 找到你的网站…

    other 2023年8月5日
    00
  • 64位 win7 旗舰版安装MSCOMM32.OCX的方法

    安装MSCOMM32.OCX是为了在64位的Windows 7旗舰版上使用串口通信功能。下面是安装MSCOMM32.OCX的详细攻略: 下载MSCOMM32.OCX文件: 首先,打开浏览器并访问可信赖的软件下载网站,如www.ocxdump.com。 在网站的搜索栏中输入\”MSCOMM32.OCX\”并点击搜索按钮。 在搜索结果中找到适用于64位Windo…

    other 2023年7月28日
    00
  • 华为手机怎么打开开发者选项?华为开发者选项开启教程

    华为手机如何打开开发者选项? 华为手机打开开发者选项的方法是基本相同的,以下是具体步骤: 步骤一:进入手机设置 首先要打开手机设置,可以在桌面或者应用列表中找到设置图标,并点击进入。 步骤二:进入关于手机 在设置中找到关于手机选项,然后点击进入。 步骤三:点击版本号七次 在关于手机的界面中找到“版本号”选项,并连续点击七次,即可开启开发者选项。 步骤四:开启…

    other 2023年6月26日
    00
  • 超详细的Android开发调试工具ADB命令及安装介绍

    超详细的Android开发调试工具ADB命令及安装介绍 什么是ADB Android Debug Bridge(简称ADB)是一个调试工具,它可以通过USB或TCP/IP连接Android设备,让开发者可以在开发及调试移动应用时与设备进行通信,进行文件传输、安装应用、调试应用等操作。 ADB命令的安装 ADB是一个Android SDK的组件,因此,要安装A…

    other 2023年6月26日
    00
  • Javascript中从学习bind到实现bind的过程

    学习 JavaScript 中的函数绑定(bind)需要了解以下几个方面: 理解 this 到底是哪个对象; 理解函数调用的几种方式(隐式绑定、显式绑定、new 绑定等); 学习实现 bind 函数。 step1:理解 this 到底是哪个对象 this 的指向问题一直都是 JavaScript 中比较容易让人困惑的问题,因为它的指向是非常灵活的。在函数执行…

    other 2023年6月26日
    00
  • MySQL表的重命名字段添加及字段属性修改操作语法

    当需要对MySQL中的表进行重命名字段、添加字段或者修改字段属性的时候,可以使用以下语法: 重命名字段 ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名; 示例1:将表“students”中的字段“age”改为“years”。 ALTER TABLE students RENAME COLUMN age TO years; …

    other 2023年6月25日
    00
  • Android nonTransitiveRClass资源冲突问题浅析

    Android nonTransitiveRClass资源冲突问题浅析 在Android开发中,我们经常会遇到nonTransitiveRClass资源冲突的问题。这个问题通常发生在引入多个库或模块时,它们可能会包含相同的资源文件,导致编译时出现冲突。下面是对这个问题的详细分析和解决方法。 问题分析 当我们在项目中引入多个库或模块时,每个库或模块都会生成一个…

    other 2023年10月12日
    00
合作推广
合作推广
分享本页
返回顶部