Android - 仿做 文件管理器

一、效果图 GIF:

Android - 仿做 文件管理器_第1张图片

二、大概功能介绍

         只能操作 内置SD卡和外置的存储器。。。

         1.顶部是当前路径

         2.第一栏是操作栏,多选,编辑等

         3.底部就是一个ListView,用来显示当前路径的所有文件和文件夹

三、部分代码:

 1.编辑对话框的代码

public void showEditDialog(){
        String[] editItems = {"              复制",
                "              剪切",
                "              粘贴",
                "              移动",
                "              删除"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("编辑:");
        builder.setItems(editItems, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                switch (i) {
                    case 0:
                        COPY_MODE = true;
                        break;
                    case 1:
                    case 3:
                        CUT_MODE = true;
                        break;
                    case 2:
                        if (mEditList.size() > 0) {
                            if (COPY_MODE) {
                                COPY_MODE = false;
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                    for (File source : mEditList) {
                                        File target = new File(currentRoute + "/" + source.getName());
                                        try {
                                            if (source.isDirectory()) {
                                                Log.d(TAG, "run: file是文件夹");
                                            } else {
                                                copyFileUsingFileChannels(source, target);
                                            }
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                    initData(new File(currentRoute).listFiles());
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            adapter.notifyDataSetChanged();
                                        }
                                    });
                                    mEditList.clear();
                                    }
                                }).start();
                            } else if (CUT_MODE) {
                                CUT_MODE = false;
                                Log.d(TAG, "onClick: 进行剪切功能");
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                    for (File source : mEditList) {
                                        File target = new File(currentRoute + "/" + source.getName());
                                        try {
                                            if (source.isDirectory()) {
                                                Log.d(TAG, "run: file是文件夹");
                                            } else {
                                                copyFileUsingFileChannels(source, target);
                                                source.delete();
                                            }
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                    initData(new File(currentRoute).listFiles());
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            adapter.notifyDataSetChanged();
                                        }
                                    });
                                    mEditList.clear();
                                    }
                                }).start();
                            }
                        } else {
                            Toast.makeText(MainActivity.this, "请先复制或剪切文件!",
                                    Toast.LENGTH_SHORT).show();
                        }
                        break;
                    case 4:
                        if (mEditList.size() > 0) {
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                for (File file : mEditList) {
                                    if (file.isDirectory()) {
                                        Log.d(TAG, "run: file是文件夹");
                                    } else {
                                        file.delete();
                                    }
                                }
                                initData(new File(currentRoute).listFiles());
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        adapter.notifyDataSetChanged();
                                    }
                                });
                                mEditList.clear();
                                }
                            }).start();
                        } else {
                            Toast.makeText(MainActivity.this, "请先选择要删除的文件!",
                                    Toast.LENGTH_SHORT).show();
                        }
                        break;
                }
                dialogInterface.dismiss();
            }
        });
        builder.show();
    }
以下参考大神的代码
2.获取内置和外置SD卡或存储器的代码:

Android 内部存储(外置SD卡)和扩展存储卡(TF卡)路径的获取

3.对于文件的复制:

 java复制文件的4种方式


四、Bug和不足,自我检讨

 

         1.因为是仿制别人的,所以没有专业的流程图。直接干,代码乱糟糟的....

                                               ?我要学会敲代码前,有一套周密的流程图?

 

         2.获取内置和外置存储是从网上抄的,内置会自己写,外置的就不会了,                                                        

                                               ?我要自己学会怎么获取外置存储器?

 

         3.打开文件也是从网上抄的,不知道apk,mp3,jpg如何打开......txt居然用网页打开...我看ES文件管理器有自己的文档编辑器

                                               ?理解,学习,掌握如何打开文件?

 

         4.不能对文件夹进行复制,剪切.......

                                               ?学吧.....?

 

         5.ListView的文件没有对应图标...不懂分类!每个item结尾没有详细日期,大小,是否可操作等信息

                                               ?这个应该不难,好像File类就自带方法?

你可能感兴趣的:(菜鸟日记)