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>

    今天的任务稍微简单点。

      

  • 相关阅读:
    体检套餐管理系统
    在这个与金沂同桌的日子里,我在北大青鸟学习了 第四章 深入类的方法 下面是我的上机3
    总结
    今天晚上雨夹雪,爱人狠心把我撇。今夜孤独一个人,只好来把代码写。 欢迎阅读我的第四章笔记 深入类的方法
    我在北京写代码 写出心中悲与喜 写出人间的悲欢离合 欢迎阅读 我的第三章 使用集合组织相关数据(泛型集合)
    在那个春暖花开的季节 今天微微的小雨 伴着轻轻的晚风我们一起来编写 员工考勤信息管理
    非泛型集合
    经理评分系统
    模仿魔兽登录界面 编程小练习
    【BZOJ 3524】【Poi2014】Couriers 可持久化线段树
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/13337272.html
Copyright © 2011-2022 走看看