android 文件管理器:
功能列表:
1: 实现了在ListView中浏览本地全部文件.
2: 实现了对文件的增(新建文件夹)
3: 删(删除文件或文件夹).
4: 改(重命名以及复制粘贴文件).
5: 查(对当前路径下的递归查询).
6: 排(对显示在listView中的文件按时间,大小或文件名排序).
总体思路:
大概的思路是首先遍历本地全部文件的根目录,而后经过使用栈结构存储文件路径,由于出栈入栈的特性很适合处理随着用户操做不断推出存入的文件路径,以后增删改查的具体实如今下文都有详细解释以及缩略图,总共花费大概10个小时,也是完成了任务。
实现原理:
使用了栈结构保存当前的文件路径,每一次点击文件夹,就会把当前文件名推入栈组成新的文件路径。
实现获得当前栈路径的方法:android
//获得当前栈路径的String private String getPathString() { Stack<String> temp = new Stack<>(); temp.addAll(nowPathStack); String result = ""; while (temp.size() != 0) { result = temp.pop() + result; } return result; }
在item的onItemClick方法中将点击的文件名推入栈:ide
//若是是文件夹 // 清除列表数据 // 得到目录中的内容,计入列表中 // 适配器通知数据集改变 nowPathStack.push("/" + file.getName()); showChangge(getPathString());
显示改变路径以后的listview文件列表:ui
//显示改变data以后的文件数据列表 private void showChangge(String path) { showtv.setText(path); files = new File(path).listFiles(); data.clear(); for (File f : files) { data.add(f); } files = fileAdapter.setfiledata(data); }
实现原理:
根据当前路径,以及经过dialog获得的用户输入的文件名执行新建文件夹的操做:this
/** * 建立新文件夹 */ private void doCreateNewFolder() { mydialog = new AlertDialog.Builder(MainActivity.this).create(); mydialog.show(); mydialog.getWindow().setContentView(R.layout.newfloder_dialog); mydialog.setView(new EditText(MainActivity.this)); //加入下面两句之后便可弹出输入法 mydialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); mydialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); newfloder_name = (EditText) mydialog.getWindow().findViewById(R.id.newfloder_name); mydialog.getWindow() .findViewById(R.id.newfloder_cancle) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mydialog.dismiss(); } }); mydialog.getWindow() .findViewById(R.id.newfloder_create) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String name = newfloder_name.getText().toString(); if (name != null) { File folder = new File(getPathString() + "/" + name); folder.mkdirs(); if (folder.exists()) { Toast.makeText(MainActivity.this,"文件:"+name + " 建立成功",Toast.LENGTH_SHORT).show(); showChangge(getPathString()); mydialog.dismiss(); } } } }); }
这里是对其中部分功能的核心代码进行显示。code