zoukankan      html  css  js  c++  java
  • 专属空间三——文件管理器

      今天是进行开发的第三天了,今天实现的是相当于一个文件管理器的功能。

      首先先说一下今天学到的东西:今天对昨天学到的东西ListView进行了应用,Adapter再一次的深加工。

      以及有如何获取SD卡的内容方法和权限的写法(这个要注意,要不然功能无法实现)

      主要是通过获取SD卡的内容加载到Map中,然后再加上适配器呈现在listView,其中要注意父目录和子目录的逻辑顺序,程序其实也就是相当于使用了递归的写法。 然后在上面加上了当前目录的位置,绝对路径。接着是在页面下写了一个Imagebutton,根据父子目录的递归带哦用跳转界面,也就是文件夹(判断当前目录是否为SD卡的根目录,如果是直接退出ACTIVITY如果不是,就获取当前文件的父目录,然后重新加载ListView文件)

      

    下面是FileExplorer.java和对应的xml文件

    package com.example.personspace.FileExplorer;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Environment;
    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 com.example.personspace.MainActivity;
    import com.example.personspace.R;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class FileExplorerActivity extends AppCompatActivity {
        TextView pathTv;
        ImageButton backBtn;
        ListView fileLv;
        File currentParent;
        File[] currenFiles;
        File root;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_file_explorer);
    
            pathTv=findViewById(R.id.id_filepath);
            backBtn=findViewById(R.id.id_btn_back);
            fileLv=findViewById(R.id.id_lv_file);
            //判断手机是否装载了SD卡
            boolean isLoadSDCard= Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
            if (isLoadSDCard){
                //获取SD卡的根目录
                root=Environment.getExternalStorageDirectory();
                currentParent =root;
                //获取当前文件夹下所有的文件;
                currenFiles=currentParent.listFiles();
                inflateListView(currenFiles);
            }else{
                Toast.makeText(this,"SD卡没有被装载",Toast.LENGTH_SHORT).show();
    
            }
    //      设置监听事件
            setListener();
        }
    
        private void setListener() {
            fileLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    if (currenFiles[position].isFile()){
                        Toast.makeText(FileExplorerActivity.this,"无法打开此文件,正在完善中",Toast.LENGTH_SHORT).show();
    
                        return;
                    }
                    File[] temp=currenFiles[position].listFiles();
                    if (temp==null||temp.length==0){
                        Toast.makeText(FileExplorerActivity.this,"当前文件夹没有内容或者不能被访问",Toast.LENGTH_SHORT).show();
    
                    }else{
                        //修改被点击这项的父目录
                        currentParent=currenFiles[position];
                        currenFiles=temp;
                        //数据源发生改变,重新设置适配器内容
                        inflateListView(currenFiles);
                    }
    
                }
            });
    
    
            backBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //判断当前的目录是否为SD卡的根目录,如果是直接退出activity
                    //如果不是根目录,就获取当前文件的父目录,然后重新加载listView文件
                    if (currentParent.getAbsolutePath().equals(root.getAbsolutePath())){
                        Intent intent=new Intent(FileExplorerActivity.this, MainActivity.class);
                        startActivity(intent);
                    }else{
                        currentParent=currentParent.getParentFile();
                        currenFiles=currentParent.listFiles();
                        inflateListView(currenFiles);
                    }
    
    
    
                }
            });
    
        }
    
        private void inflateListView(File[] currenFiles) {
    
            List<Map<String,Object>> list=new ArrayList<>();
            for (int i=0;i<currenFiles.length;i++){
                Map<String,Object> map=new HashMap<>();
                map.put("filename",currenFiles[i].getName());
                if (currenFiles[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_laicon});
            fileLv.setAdapter(adapter);
            pathTv.setText("当前路径:"+currentParent.getAbsolutePath());
        }
    
    
    
    
    
    }
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns: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"
        >
    
        <TextView
            android:id="@+id/id_filepath"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="文件路劲:/mnt/sdcard"
            />
        <ImageButton
            android:id="@+id/id_btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/back1"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"/>
        <ListView
            android:id="@+id/id_lv_file"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/id_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"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="5dp">
        <ImageView
            android:id="@+id/item_laicon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/folder"/>
        <TextView
            android:id="@+id/item_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="35sp"
            android:layout_marginLeft="20dp"
            android:text="112222"/>
    
    
    </LinearLayout>

    今天的任务稍微简单点。

      

  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/13337272.html
Copyright © 2011-2022 走看看