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日

相关文章

  • unidac使用教程(五):数据加密

    以下是关于UniDAC数据加密的完整攻略,包括数据加密的定义、使用方法、示例说明和注意事项。 数据加密的定义 数据密是指将明文数据通过一定的算法转换为密文数据,以保护数据的安全性和隐私性。在数据库应用中,数据加密可以帮助用户保护敏感数据,例如密码、信用卡号码等。 使用方法 以下是使用UniDAC进行数据加密的方法: 创建加密器 在Delphi中,可以使用TU…

    other 2023年5月8日
    00
  • textcontent、innertext的用法 在文档中插入纯文本

    textContent、innerText的用法 在文档中插入纯文本 在JavaScript中,有两个常用的属性可以用来修改页面元素的文本内容,它们分别是 textContent 和 innerText。本文将介绍它们的用法,并以实例演示如何向文档中插入纯文本。 textContent textContent 属性返回或设置指定元素中的文本内容,包括所有后代…

    其他 2023年3月28日
    00
  • Android自定义悬浮按钮效果

    Android自定义悬浮按钮效果 在手机应用开发中,悬浮按钮已经成为了流行的用户界面元素。悬浮按钮可以通过相应的手势实现一些应用操作,比如向上滑动打开应用菜单、向下滑动隐藏悬浮按钮等等。本文将介绍如何使用Android SDK来自定义悬浮按钮效果。 步骤1:创建悬浮按钮控件 为了实现悬浮按钮的效果,需要创建自定义的View控件。下面是一个简单的悬浮按钮控件代…

    other 2023年6月25日
    00
  • .lnk是什么文件 lnk是快捷方式的后缀(附.url说明)

    .lnk是什么文件? .lnk是Windows操作系统中快捷方式的文件后缀。快捷方式是指向其他文件、文件夹、应用程序或网页的链接,它们提供了一种方便的方式来访问这些目标。快捷方式文件本身并不包含实际的目标文件的内容,而只是包含了指向目标文件的路径和其他相关信息。 .lnk文件的结构 .lnk文件是二进制文件,它包含了一系列的数据结构来描述快捷方式的属性和目标…

    other 2023年8月5日
    00
  • 最详细的div边距合并的问题和解决方法

    最详细的div边距合并的问题和解决方法 在HTML和CSS的开发中,我们常常会遇到div边距合并的问题。这种问题很容易出现,但是又给我们带来很多麻烦。在本文中,我们将详细介绍什么是div边距合并,为什么会出现这个问题,以及如何解决这个问题。 什么是div边距合并 在CSS中,每个元素都有自己的外边距和内边距。当有两个或者更多的div元素垂直排列时,它们之间可…

    其他 2023年3月28日
    00
  • 魔兽世界wlk怀旧服刺杀贼堆什么属性 刺杀贼属性优先级选择攻略

    魔兽世界wlk怀旧服刺杀贼堆什么属性 魔兽世界wlk怀旧服刺杀贼作为一个非常重要的dps职业,属性堆放尤为重要,因为属性的选择直接影响到刺杀贼的输出能力。所以在刺杀贼属性的选择上,需要掌握一些基本的优先级原则。 刺杀贼的属性优先级 在魔兽世界wlk怀旧服中,刺杀贼的属性优先级如下: 爆击率(Crit chance) 硬直/突袭伤害(Ambush/backst…

    other 2023年6月27日
    00
  • vector的几种初始化及赋值方式

    Vector的几种初始化及赋值方式 在C++中,vector是一个非常常用的容器,它可以动态地增加和减少元素,类似于数组,但是不需要提前预留空间,更加灵活方便。本文将介绍vector的几种初始化及赋值方法。 声明并初始化 当我们声明一个vector变量时,需要指定元素的数据类型,如: vector<int> vec; 此时vec是一个空的vect…

    其他 2023年3月28日
    00
  • 对angular2中的ngfor和ngif指令嵌套实例讲解

    对Angular 2中的ngFor和ngIf指令嵌套实例讲解 在Angular 2中,ngFor和ngIf是两个常用的指令,它们可以嵌套在一起使用,以实现更复杂的逻辑和功能。下面将详细讲解如何在Angular 2中嵌套使用ngFor和ngIf指令,并提供两个示例说明。 示例1:基本嵌套使用 首先,我们来看一个基本的嵌套使用示例。假设我们有一个包含学生信息的数…

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