Android文件管理器

来源:互联网 发布:oracledriver源码 编辑:程序博客网 时间:2024/06/11 22:42

文件管理器时所遇到的问题
1.如何点击列表项进入相应的子菜单
答:自定义MyAdapter继承自BaseAdapter,获取目录下的所有文件存入ArrayList中,然后依次为布局中的textView赋值,这样点击列表项的时候获取的是文件,通过该文件的绝对路径,获取该文件下的所有子文件。
2.如何返回上一级目录
答:每次单击列表项的时候把该目录的绝对路径添加的一个一个ArrayList中,点击返回的时候再把列表中最后一个文件去除后的最后一个路径取出来,就是上一级目录了
源码

import android.app.AlertDialog;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;/** * 文件管理器主要功能实现 * 1.列出系统目录下所有文件及文件夹 * 2.点击文件夹 可以进入下一级目录 * 3.点击返回可以进入上一级目录 * 4.为文件或文件夹添加相应的图标,列出文件夹下的文件和文件夹的数量,文件最后被修改的时间 * 5.点击文件的时候为文件选择相应的方式打开 */public class MainActivity extends AppCompatActivity {    private ListView lv;    private Button btnBack,btnGo;    private MyAdapter myAdapter;    private FileUtil fileUtil;    private ArrayList<String> pathList;    private String upPath;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();//初始化用户界面    }    private void init() {        fileUtil=new FileUtil();        pathList=new ArrayList<String>();        upPath=Environment.getExternalStorageDirectory().getAbsolutePath();        pathList.add(upPath);        fileUtil.getFiles(upPath);        lv= (ListView) findViewById(R.id.lv);        btnBack= (Button) findViewById(R.id.btn_back);        btnGo= (Button) findViewById(R.id.btn_go);        btnBack.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(pathList.size()>1){                    pathList.remove(pathList.size()-1);                    upPath=pathList.get(pathList.size()-1);                    fileUtil.getFiles(upPath);                    setListView();                }else{                    Toast.makeText(MainActivity.this,"这是最前面了",Toast.LENGTH_SHORT).show();                }            }        });        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                File fileItem=fileUtil.fileList.get(position);                if(fileItem.isFile()){                    if(fileItem.getName().endsWith("jpg")||fileItem.getName().endsWith("jpeg")||fileItem.getName().endsWith("bmp")||fileItem.getName().endsWith("png")) {                        Intent intentImg = new Intent(Intent.ACTION_VIEW);                        intentImg.setDataAndType(Uri.fromFile(fileItem), "image/*");                        startActivity(intentImg);                    }                    if(fileItem.getName().endsWith("mp4")||fileItem.getName().endsWith("wmv")){                        Intent intentVideo = new Intent(Intent.ACTION_VIEW);                        intentVideo.setDataAndType(Uri.parse(fileItem.getAbsolutePath()), "video/*");                        startActivity(intentVideo);                    }                    if(fileItem.getName().endsWith("txt")){                        Intent intentTxt=new Intent(MainActivity.this,TxtRead.class);                        intentTxt.putExtra("content",readTxt(fileItem));                        startActivity(intentTxt);                    }                    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this).setTitle("警告").setMessage("这是一个文件");                }else{                    pathList.add(fileItem.getAbsolutePath());                    fileUtil.getFiles(fileItem.getAbsolutePath());                    setListView();                }            }        });    }    public String readTxt(File file){        InputStreamReader inputStreamReader = null;        try {            inputStreamReader = new InputStreamReader(new FileInputStream(file), "gbk");        } catch (UnsupportedEncodingException e1) {            e1.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        }        BufferedReader reader = new BufferedReader(inputStreamReader);        StringBuffer sb = new StringBuffer("");        String line;        try {            while ((line = reader.readLine()) != null) {                sb.append(line);                sb.append("\n");            }        } catch (IOException e) {            e.printStackTrace();        }        return sb.toString();    }    public void setListView(){        myAdapter=new MyAdapter(this,fileUtil.fileList);        lv.setAdapter(myAdapter);    }    @Override    protected void onResume() {        super.onResume();        setListView();    }}

这是文件操作类

import java.io.File;import java.util.ArrayList;/** * Created by Administrator on 2016/9/5. */public class FileUtil {    public  ArrayList<File> fileList=new ArrayList<File>();    public  int fileCounter;    public  int forderCounter;    //获取某个路径下的所有文件    public  ArrayList getFiles(String path){        File file=new File(path);        fileList.clear();        if(file.exists()){            if(file.isFile()){}else{                File[] files=file.listFiles();                for(File f:files){                    fileList.add(f);                }            }        }        return fileList;    }    public  void getFileNum(File file){        fileCounter=0;        forderCounter=0;        fileList.clear();        if(file.isFile()){}else{            getFiles(file.getAbsolutePath());            for(File f:fileList){                if(f.isFile()){                    fileCounter++;                }else{                    forderCounter++;                }            }        }    }}

这是自定义的adapter

public class MyAdapter extends BaseAdapter {    private Context context;    private ArrayList<File> fileList;    private LinearLayout layout;    FileUtil fileUtil=new FileUtil();    public MyAdapter(Context context,ArrayList fileList) {        this.context = context;        this.fileList=fileList;    }    @Override    public int getCount() {        return fileList.size();    }    @Override    public Object getItem(int position) {        return fileList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        LayoutInflater inflater=LayoutInflater.from(context);        layout= (LinearLayout) inflater.inflate(R.layout.cell,null);        TextView tv1= (TextView) layout.findViewById(R.id.tv1);        TextView tv2= (TextView) layout.findViewById(R.id.tv2);        ImageView imageView= (ImageView) layout.findViewById(R.id.image_view);        File file=fileList.get(position);        fileUtil.getFileNum(file);        if(file.isFile()){            if(file.getName().endsWith("txt")){                imageView.setImageResource(R.drawable.txt);            }else if(file.getName().endsWith("jpg")||file.getName().endsWith("jpeg")||file.getName().endsWith("bmp")||file.getName().endsWith("png")) {                imageView.setImageBitmap(ThumbnailUtil.getImageThumbnail(file.getAbsolutePath(),50,50));            }else if(file.getName().endsWith("mp4")||file.getName().endsWith("wmv")){                imageView.setImageBitmap(ThumbnailUtil.getVideoThumbnail(file.getAbsolutePath(),50,50, MediaStore.Images.Thumbnails.MICRO_KIND));            }else{                imageView.setImageResource(R.drawable.wenhao);            }            tv1.setText(file.getName());        }else {            imageView.setImageResource(R.drawable.wjj);            tv1.setText(file.getName()+" 文件:"+fileUtil.fileCounter+" 文件夹:"+fileUtil.forderCounter);        }        tv2.setText(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date(file.lastModified())));        return layout;    }}

缩略图类

public class ThumbnailUtil {    public static Bitmap getImageThumbnail(String url, int width, int height) {        Bitmap bitmap=null;        BitmapFactory.Options options=new BitmapFactory.Options();        options.inJustDecodeBounds=true;        bitmap=BitmapFactory.decodeFile(url,options);        options.inJustDecodeBounds=false;        int beWidth = options.outWidth / width;        int beHeight = options.outHeight / height;        int be = 1;        if (beWidth < beHeight) {            be = beWidth;        } else {            be = beHeight;        }        if (be <= 0) {            be = 1;        }        options.inSampleSize = be;        bitmap = BitmapFactory.decodeFile(url, options);        bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,                ThumbnailUtils.OPTIONS_RECYCLE_INPUT);        return bitmap;    }    /**     * 获取视频的缩略图     * @param uri     * @param width     * @param height     * @param kind     * @return bitmap     */    public static Bitmap getVideoThumbnail(String uri, int width, int height, int kind) {        Bitmap bitmap=null;        bitmap = ThumbnailUtils.createVideoThumbnail(uri,kind);        bitmap = ThumbnailUtils.extractThumbnail(bitmap,width,height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);        return bitmap;    }}

布局很简单就不列举了上传一张图就行了这里写图片描述

0 0