zoukankan      html  css  js  c++  java
  • 文件管理器

    主类

    public class main extends ListActivity/*继承这个类就可以直接进入安卓文件目录*/{
    private static final String ROOT_PATH = "/";
    //存储文件名称
    private ArrayList<String> mFileName = null;
    //存储文件路径
    private ArrayList<String> mFilePath = null;
    //重命名布局xml文件显示dialog
    private View view;

    private EditText editText;

    /**
    * Called when the activity is first created.
    */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //显示文件列表
    showFileDir(ROOT_PATH);
    }

    /**
    * 扫描显示文件列表 ,第一次才这样
    * @param path
    */
    private void showFileDir(String path) {
    mFileName = new ArrayList<String>();
    mFilePath = new ArrayList<String>();// ------路径-------
    File file = new File(path);

    File[] files = file.listFiles();
    //如果当前目录不是根目录,预防万一
    if (!ROOT_PATH.equals(path)) {
    mFileName.add("@1");
    mFilePath.add(ROOT_PATH);
    mFileName.add("@2");
    mFilePath.add(file.getParent());
    }
    //添加所有文件
    for (File f : files) {
    mFileName.add(f.getName());
    mFilePath.add(f.getPath());
    }
    this.setListAdapter(new MyAdapter(this, mFileName, mFilePath));
    }

    /**
    * 点击事件,点击文件夹获取路径
    * @param l
    * @param v
    * @param position
    * @param id
    */
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    String path = mFilePath.get(position);
    File file = new File(path);
    // 文件存在并可读
    if (file.exists() && file.canRead()) {
    if (file.isDirectory()) {
    //显示子目录及文件 -----------------我要学的------------------
    showFileDir(path);
    } else {
    //处理文件
    fileHandle(file);
    }
    }
    //没有权限
    else {
    Resources res = getResources();
    new AlertDialog.Builder(this).setTitle("Message")
    .setMessage(res.getString(R.drawable.ic_launcher))
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(getApplicationContext(), "打开不了", Toast.LENGTH_SHORT).show();
    }
    }).show();
    }
    super.onListItemClick(l, v, position, id);
    }

    //对文件进行增删改
    private void fileHandle(final File file) {
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    // 打开文件
    if (which == 0) {
    openFile(file); //--------------------我要学的-------------------
    }
    //修改文件名
    else if (which == 1) {
    LayoutInflater factory = LayoutInflater.from(main.this);
    view = factory.inflate(R.layout.rename_dialog, null);
    editText = (EditText) view.findViewById(R.id.editText);
    editText.setText(file.getName());

    DialogInterface.OnClickListener listener2 = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    String modifyName = editText.getText().toString();
    final String fpath = file.getParentFile().getPath();
    final File newFile = new File(fpath + "/" + modifyName);
    if (newFile.exists()) {
    //排除没有修改情况
    if (!modifyName.equals(file.getName())) {
    new AlertDialog.Builder(main.this)
    .setTitle("注意!")
    .setMessage("文件名已存在,是否覆盖?")
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    if (file.renameTo(newFile)) {
    showFileDir(fpath);
    displayToast("重命名成功!");
    } else {
    displayToast("重命名失败!");
    }
    }
    })
    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
    })
    .show();
    }
    } else {
    if (file.renameTo(newFile)) {
    showFileDir(fpath);
    displayToast("重命名成功!");
    } else {
    displayToast("重命名失败!");
    }
    }
    }
    };
    AlertDialog renameDialog = new AlertDialog.Builder(main.this).create();
    renameDialog.setView(view);
    renameDialog.setButton("确定", listener2);
    renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    }
    });
    renameDialog.show();
    }else if (which ==2) {//音乐
    //找路径
    Toast.makeText(getApplicationContext(), "我是音乐", Toast.LENGTH_LONG).show();
    Music.IntetnMusic(main.this, file.getName(), file.getPath());

    }else if (which == 3) {//视频
    Toast.makeText(getApplicationContext(), "我是视频", Toast.LENGTH_LONG).show();
    Video.ActivityVideo(main.this, file.getName(), file.getPath());
    }
    //删除文件
    else {
    new AlertDialog.Builder(main.this)
    .setTitle("注意!")
    .setMessage("确定要删除此文件吗?")
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    if (file.delete()) {
    //更新文件列表
    showFileDir(file.getParent());
    displayToast("删除成功!");
    } else {
    displayToast("删除失败!");
    }
    }
    })
    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    }
    }).show();
    }
    }
    };
    //选择文件时,弹出增删该操作选项对话框
    String[] menu = {"打开文件", "重命名","播放音乐","播放视频", "删除文件"};
    new AlertDialog.Builder(main.this)
    .setTitle("请选择要进行的操作!")
    .setItems(menu, listener)
    .setPositiveButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    }
    }).show();
    }

    //打开文件
    private void openFile(File file) {
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(android.content.Intent.ACTION_VIEW);
    String type = getMIMEType(file);
    intent.setDataAndType(Uri.fromFile(file), type);
    startActivity(intent);
    }

    //获取文件mimetype
    private String getMIMEType(File file) {
    String type = "";
    String name = file.getName();
    //文件扩展名
    String end = name.substring(name.lastIndexOf(".") + 1, name.length()).toLowerCase();
    if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")) {
    type = "audio";
    } else if (end.equals("mp4") || end.equals("3gp")) {
    type = "video";
    } else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")) {
    type = "image";
    } else {
    //如果无法直接打开,跳出列表由用户选择
    type = "*"; //调用系统选项
    }
    type += "/*";
    return type;
    }

    private void displayToast(String message) {
    Toast.makeText(main.this, message, Toast.LENGTH_SHORT).show();
    }

    public boolean onCreateOptionsMenu(Menu menu) {
    //super.getMenuInflater().inflate(R.menu.main_menu, menu);
    menu.add(Menu.NONE, Menu.FIRST + 1, 7, "新建")
    .setIcon(android.R.drawable.ic_menu_send);
    menu.add(Menu.NONE, Menu.FIRST + 2, 3, "取消")
    .setIcon(android.R.drawable.ic_menu_edit);
    return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case Menu.FIRST + 1:{
    final EditText editText = new EditText(main.this);
    new AlertDialog.Builder(main.this).setTitle("请输入文件名称").setView(editText).setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    String mFileName = editText.getText().toString();
    String IMAGES_PATH = Environment.getExternalStorageDirectory() + "/" + mFileName + "/"; //获取根目录
    //String IMAGES_PATH = getApplicationContext().getFilesDir().getAbsolutePath() + "/" + mFileName + "/";
    createMkdir(IMAGES_PATH);
    }
    }).setNegativeButton("取消", null).show();
    }
    break;
    case Menu.FIRST + 2:
    Toast.makeText(this, "取消", Toast.LENGTH_LONG).show();
    break;
    }
    return false;
    }
    public static void createMkdir(String folderPath) {
    File folder = new File(folderPath);
    if (!folder.exists()) {
    folder.mkdir();
    }
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    finish();
    return true;
    } else {
    return super.onKeyDown(keyCode, event);
    }

    }
    }

    适配器:

    public class MyAdapter extends BaseAdapter{
    private LayoutInflater inflater;
    private Bitmap directory, file;
    //存储文件名称
    private ArrayList<String> names = null;
    //存储文件路径
    private ArrayList<String> paths = null;

    //参数初始化
    public MyAdapter(Context context, ArrayList<String> na, ArrayList<String> pa) {
    names = na;
    paths = pa;
    directory = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
    file = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
    //缩小图片
    directory = small(directory, 0.16f);
    file = small(file, 0.1f);
    inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return names.size();
    }

    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return names.get(position);
    }

    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    if (null == convertView) {
    convertView = inflater.inflate(R.layout.file, null);
    holder = new ViewHolder();
    holder.text = (TextView) convertView.findViewById(R.id.textView);
    holder.image = (ImageView) convertView.findViewById(R.id.imageView);

    convertView.setTag(holder);
    } else {
    holder = (ViewHolder) convertView.getTag();
    }
    File f = new File(paths.get(position).toString());
    if (names.get(position).equals("@1")) {
    holder.text.setText("/");
    holder.image.setImageBitmap(directory);
    } else if (names.get(position).equals("@2")) {
    holder.text.setText("..");
    holder.image.setImageBitmap(directory);
    } else {
    holder.text.setText(f.getName());
    if (f.isDirectory()) {
    holder.image.setImageBitmap(directory);
    } else if (f.isFile()) {
    holder.image.setImageBitmap(file);
    } else {
    System.out.println(f.getName());
    }
    }
    return convertView;
    }

    private class ViewHolder {
    private TextView text;
    private ImageView image;
    }

    private Bitmap small(Bitmap map, float num) {
    Matrix matrix = new Matrix();
    matrix.postScale(num, num);
    return Bitmap.createBitmap(map, 0, 0, map.getWidth(), map.getHeight(), matrix, true);
    }
    }

  • 相关阅读:
    QQ 表情大全
    Linux/Unix同Windows文件传输
    CentOS 5.2安装Oracle 10g
    用户名、密码测试用例
    界面测试用例
    PLSQL导入导出数据库
    JavaScript代码格式规范和注意事项
    Node.js 之发送文件数据编码问题
    Node.js 之IP地址和端口号
    Node.js 之ContentType内容类型
  • 原文地址:https://www.cnblogs.com/laijinquan/p/5946237.html
Copyright © 2011-2022 走看看