Android 简单文件管理器

news/2024/12/15 18:07:38/

Android 简单文件管理器

主界面
开发环境Android studio 4.1.2
运行环境 api 22
ps api 23及以上需动态添加sd卡权限,静态添加无效

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
package com.example.file_manage;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 实现文件管理器功能* 2021、3、29* 功能:点击文件夹,进入下一级;点击返回按钮,回到上一级,如果当前是根目录,则退出activity;*/
public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";TextView pathTv;ImageButton backBtn;ListView fileLv;File currentParent;//父目录File[] currentFiles; //当前文件夹的所有文件File root;  //sd卡根目录//    用于动态添加权限private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pathTv=findViewById(R.id.id_tv_filepath);backBtn=findViewById(R.id.id_btn_back);fileLv=findViewById(R.id.id_lv_file);//        try {  //动态添加读写sd卡的权限,6.0静态添加无效    api23以上
//            //检测是否有写的权限
//            int permission = ActivityCompat.checkSelfPermission(this,
//                    "android.permission.WRITE_EXTERNAL_STORAGE");
//            if (permission != PackageManager.PERMISSION_GRANTED) {
//                // 没有写的权限,去申请写的权限,会弹出对话框
//                ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }//        判断是否装载了sdcardboolean isLoadSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);if (isLoadSDCard) {
//            获取sdcard的根目录root = Environment.getExternalStorageDirectory();currentParent = root;
//            获取当前文件夹的所有文件currentFiles = currentParent.listFiles();Log.i(TAG, "onCreate: currentFiles:"+currentFiles.length);inflateListView(currentFiles);}else{Toast.makeText(this, "SD卡没有被装载。", Toast.LENGTH_SHORT).show();}setListener();}//    设置监听事件private void setListener() {fileLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {if (currentFiles[position].isFile()) {Toast.makeText(MainActivity.this, "无法打开此文件", Toast.LENGTH_SHORT).show();return;}
//                获取当前点击的文件夹当中的所有文件File[] temp = currentFiles[position].listFiles();if (temp == null || temp.length==0) {Toast.makeText(MainActivity.this, "当前文件夹没有内容或不能被访问。", Toast.LENGTH_SHORT).show();}else{
//                    修改被点击的这项父目录currentParent = currentFiles[position];currentFiles=temp;
//                    数据源发生改变,重新设置适配器内容inflateListView(currentFiles);}}});//        返回按钮事件backBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//                判断当前目录是否为sd卡的根目录,就直接退出activity
//                如果不是根目录,就获取当前目录的父目录,然后获得父目录的文件,
//                再重新加载listviewif (currentParent.getAbsolutePath().equals(root.getAbsolutePath())) {MainActivity.this.finish();}else{currentParent = currentParent.getParentFile();currentFiles = currentParent.listFiles();inflateListView(currentFiles);}}});}private void inflateListView(File[] currentFiles) {List<Map<String, Object>> list=new ArrayList<>();for (int i = 0; i < currentFiles.length; i++){Map<String, Object> map = new HashMap<>();map.put("filename", currentFiles[i].getName());if (currentFiles[i].isFile()) {  //如果是文件,显示文件图标map.put("icon", R.mipmap.file);}else{   //如果是文件夹,显示文件夹图标map.put("icon", R.mipmap.folder);}list.add(map);}
//        创建适配器SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item_file_explorer, new String[]{"filename", "icon"}, new int[]{R.id.item_tv, R.id.item_icon});fileLv.setAdapter(adapter);pathTv.setText("当前路径:"+currentParent.getAbsolutePath());}}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/id_tv_filepath"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="文件路径:/mnt/sdcard"/><ImageButtonandroid:id="@+id/id_btn_back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/back"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"/><ListViewandroid:id="@+id/id_lv_file"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/id_tv_filepath"android:layout_above="@id/id_btn_back"android:divider="#000"android:dividerHeight="1dp"/></RelativeLayout>
item_file_explorer.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:padding="5dp"><ImageViewandroid:id="@+id/item_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/folder"/><TextViewandroid:id="@+id/item_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:layout_marginLeft="20dp"android:text="6574654375265867"/></LinearLayout>

http://www.ppmy.cn/news/356521.html

相关文章

android 腾讯文件管理器,腾讯文件管理器android版评测报告

在android手机系统中&#xff0c;文件的繁多常常让人很苦恼&#xff0c;今日&#xff0c;腾讯推出了一款文件管理器-腾讯文件管理器&#xff0c;它功能全面、易用&#xff0c;能够帮助大家快速的找到音乐、图片、安装包、文档、压缩包等文件&#xff0c;另外本版本的一大特点&a…

互联网晚报 | 小米公布“汽车设计文件泄密”事件处理结果;蔚来回应最高超10万元降价促销;苹果发布2023财年第一财季财报...

小米公布“汽车设计文件泄密”事件处理结果 据小米公司发言人微博&#xff0c;小米公布“汽车设计文件泄密”事件处理结果。此前&#xff0c;合作方北京某模塑科技有限公司因对其下游供应商管理不善&#xff0c;泄露了公司汽车前后保险杠某个版本的过程稿。小米表示&#xff0c…

文件管理简介

文件管理 文件介绍 FHS Filesystem Hierarchy Standard 文件系统目录标准 文件特点 一切皆文件文件名严格区分大小写 Linux文件类型 普通文件(文本文件,二进制文件,压缩文件,视频,图片…) d 目录文件&#xff08;蓝色&#xff09; b 块设备文件&#xff08;存储设备硬…

文件管理(2)

一、文件保护和保密 1.文件安全与保护机制 文件共享指不同用户共同使用某些文件 文件保护是指防止文件被破坏 文件保密是指防止文件及其内容被其他用户窃取 2.文件的共享 是计算机用户完成共同任务所必须的 文件共享的并发控制 在允许文件共享的系统中&#xff0c;操作系统应…

android 本地文件管理器开发

第一步&#xff1a;主界面布局文件&#xff0c;只需要定义一个button和listview即可&#xff0c; <Buttonandroid:id"id/bt_select"android:layout_width"0dp"android:layout_weight"1"android:layout_height"wrap_content"android…

4.文件管理

考纲内容 文件系统基础 文件的概念、逻辑结构顺序文件、索引文件、索引顺序文件目录结构、文件控制块和索引结点单级目录结构和两级目录结构、树形目录结构、图形目录结构文件共享、文件保护、访问类型、访问控制 文件系统实现 文件系统层次结构、目录实现、文件实现 磁盘组织…

文件管理(下)

文件存储空间管理 为磁盘分区 存储空间管理——空闲表法 适用于连续分配方式 如何分配磁盘块&#xff1a;与内存管理中的动态分区分配很类似&#xff0c;为一个文件 分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等 算法来决定要为文件分配哪个区间。 如何回…

六、 文 件 管 理

文章目录 一、UNIX文件系统概述二、文件的物理结构三、索引结点的管理四、空闲磁盘空间的管理五、文件表的管理六、目录管理 一、UNIX文件系统概述 1. UNIX文件系统的特点 &#xff08;1&#xff09; 文件系统的组织是分级树形结构。 &#xff08;2&#xff09; 文件的物理结构…