Welcome

首页 / 移动开发 / Android / Android开发之简单文件管理器实现方法

本文实例讲述了Android开发之简单文件管理器实现方法。分享给大家供大家参考,具体如下:
这里运用Java I/O、ListActivity、Dialog、Bitmap等实现简单文件管理器,可以查看目录文件,修改文件名,删除文件,打开文件。比较简单,直接看代码:
先看布局文件:
layout/main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
文件列表布局:
layout/file.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"></TextView></LinearLayout>
修改文件名对话框布局文件:
layout/rename_dialog.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"> <EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
主Activity:
public class MainActivity extends ListActivity { private static final String ROOT_PATH = "/"; //存储文件名称 private ArrayList<String> names = null; //存储文件路径 private ArrayList<String> paths = null; 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); } private void showFileDir(String path){names = new ArrayList<String>();paths = new ArrayList<String>();File file = new File(path);File[] files = file.listFiles();//如果当前目录不是根目录if (!ROOT_PATH.equals(path)){ names.add("@1"); paths.add(ROOT_PATH); names.add("@2"); paths.add(file.getParent());}//添加所有文件for (File f : files){ names.add(f.getName()); paths.add(f.getPath());}this.setListAdapter(new MyAdapter(this,names, paths)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) {String path = paths.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.string.no_permission)) .setPositiveButton("OK",new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {} }).show();}super.onListItemClick(l, v, position, id); } //对文件进行增删改 private void fileHandle(final File file){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(MainActivity.this); view = factory.inflate(R.layout.rename_dialog, null); editText = (EditText)view.findViewById(R.id.editText); editText.setText(file.getName()); OnClickListener listener2 = new DialogInterface.OnClickListener() {@Overridepublic 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(MainActivity.this) .setTitle("注意!") .setMessage("文件名已存在,是否覆盖?") .setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { if (file.renameTo(newFile)){showFileDir(fpath);displayToast("重命名成功!"); } else{displayToast("重命名失败!"); }} }) .setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {} }) .show();} } else{if (file.renameTo(newFile)){ showFileDir(fpath); displayToast("重命名成功!");}else{ displayToast("重命名失败!");} }} }; AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create(); renameDialog.setView(view); renameDialog.setButton("确定", listener2); renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub} }); renameDialog.show();}//删除文件else{ new AlertDialog.Builder(MainActivity.this) .setTitle("注意!") .setMessage("确定要删除此文件吗?") .setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { if(file.delete()){//更新文件列表showFileDir(file.getParent());displayToast("删除成功!"); } else{displayToast("删除失败!"); }} }) .setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {} }).show();} }};//选择文件时,弹出增删该操作选项对话框String[] menu = {"打开文件","重命名","删除文件"};new AlertDialog.Builder(MainActivity.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(MainActivity.this, message, Toast.LENGTH_SHORT).show(); }}
自定义适配器:
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.d);file = BitmapFactory.decodeResource(context.getResources(),R.drawable.f);//缩小图片directory = small(directory,0.16f);file = small(file,0.1f);inflater = LayoutInflater.from(context); } @Override public int getCount() {// TODO Auto-generated method stubreturn names.size(); } @Override public Object getItem(int position) {// TODO Auto-generated method stubreturn names.get(position); } @Override public long getItemId(int position) {// TODO Auto-generated method stubreturn position; } @Override public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder 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); }}
因为要对文件进行操作,所以在描述文件中授权:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.test.filemanager"android:versionCode="1"android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <strong> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></strong> <application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity> </application></manifest>
运行结果如下:
查看目录文件

文件重命名:

删除文件:

打开文件:

希望本文所述对大家Android程序设计有所帮助。