FileManager 文件管理器优化!(添加文件改名及删除)

在开始代码之前先把文件结构展示一下:

 

 

第一步:给出主程序代码,同样把解释放在代码注释里面:

 

package com.my; /* import相关class */ import irdc.ex05_15.R; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ListActivity; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class FileManagerRename extends Activity implements OnItemClickListener { /** * 对象声明 items:存放显示的名称 paths:存放文件路径 rootPath:起始目录 */ private List items = null; private List paths = null; private String rootPath = "/sdcard"; private TextView mPath; private View myView; private EditText myEditText; private MyAdapter adapter; private ListView listView; private AlertDialog dialog; private String[] menu = { "打开文件", "更改文件名", "删除文件" }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mPath = (TextView) findViewById(R.id.mPath); listView = (ListView) findViewById(R.id.listView); getFileDir(rootPath);// 此函数为:拿到文件的根目录并显示 /** * 设置ListItem被点击时要做的动作 **/ listView.setOnItemClickListener(this); } /** * 取得文件的架构 **/ private void getFileDir(String filePath) { /** * 设置目前所在路径 **/ mPath.setText(filePath); items = new ArrayList(); paths = new ArrayList(); File f = new File(filePath); // f用来拿到文件的根目录 File[] files = f.listFiles();// files[]用来显示f目录下的所有文件和文件夹 /** * 如果为不是根目录,添加两个按钮,返回根目录和返回上层 **/ if (!filePath.equals(rootPath)) { items.add("b1"); paths.add(rootPath); items.add("b2"); paths.add(f.getParent()); } /* 将所有文件添加ArrayList中 */ for (int i = 0; i < files.length; i++)// file用来一个个拿到files[]里的所有文件并显示 { File file = files[i]; items.add(file.getName()); paths.add(file.getPath()); } /** * 使用自定义的MyAdapter来将数据传入ListActivity **/ adapter = new MyAdapter(this, items, paths); listView.setAdapter(adapter); } @Override public void onItemClick(AdapterView arg0, View v, int position, long id) { // TODO Auto-generated method stub File file = new File(paths.get(position)); if (file.isDirectory()) { /* 如果是文件夹就再运行getFileDir() */ getFileDir(paths.get(position)); } else { /* 如果是文件调用fileHandle() */ fileHandle(file); } } /** * Start 在此标记,增加更改文件名,覆盖文件,删除文件三个事件,开始! **/ /** * 点击文件时,调用此文件处理方法 **/ private void fileHandle(final File fileok) { /* 点击文件时的OnClickListener */ OnClickListener listener1 = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { /** * 当选择的item为打开文件时 **/ if (which == 0) { openFile(fileok);// 在对话框上选择第一项为打开文件 } /** * 当选择的item为更改档名时 **/ else if (which == 1) { LayoutInflater factory = LayoutInflater .from(FileManagerRename.this); myView = factory.inflate(R.layout.rename_alert_dialog, null);// 初始化myChoiceView,使用rename_alert_dialog为layout myEditText = (EditText) myView.findViewById(R.id.mEdit); myEditText.setText(fileok.getName());// 将原始文件名先放入EditText中 /* new一个更改文件名的Dialog的确定按钮的listener */ OnClickListener listener2 = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String modName = myEditText.getText().toString();// 取得修改后的文件路径 final String pFile = fileok.getParentFile().getPath() + "/";// 取得当前文件的父文件 final String newPath = pFile + modName;// 取得修改后文件的名称 /* 判断档名是否已存在 */ if (new File(newPath).exists()) { if (!modName.equals(fileok.getName()))// 排除修改文件名时没修改直接送出的状况 { /* 跳出Alert警告档名重复,并确认是否覆盖 */ new AlertDialog.Builder(FileManagerRename.this) .setTitle("注意!").setMessage("档名已经存在,是否要覆盖?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { /* 档名重复仍然修改会覆改掉已存在的文件 */ fileok.renameTo(new File(newPath)); /* 重新产生文件列表的ListView */ getFileDir(pFile); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } } else { /* 档名不存在,直接做修改动作 */ fileok.renameTo(new File(newPath)); /* 重新产生文件列表的ListView */ getFileDir(pFile); } } }; /* create更改档名时跳出的Dialog */ AlertDialog renameDialog = new AlertDialog.Builder( FileManagerRename.this).create(); renameDialog.setView(myView); /* 设置更改档名点击确认后的Listener */ renameDialog.setButton("确定", listener2); renameDialog.setButton2("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); renameDialog.show(); } /** * 当选择的item为删除文件时 **/ else { new AlertDialog.Builder(FileManagerRename.this).setTitle( "注意!").setMessage("确定要删除文件吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { /* 删除文件 */ fileok.delete(); getFileDir(fileok.getParent()); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } } }; /** * 选择一个文件时,跳出要如何处理文件的ListDialog **/ String[] menu = { "打开文件", "更改文件名", "删除文件" }; new AlertDialog.Builder(FileManagerRename.this).setTitle("你要做甚么?") .setItems(menu, listener1).setPositiveButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } /** * End 在此标记,增加更改文件名,覆盖文件,删除文件三个事件,结束! **/ /* 在手机上打开文件的方法 */ private void openFile(File f) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); /* 调用getMIMEType()来取得MimeType */ String type = getMIMEType(f); /* 设置intent的file与MimeType */ intent.setDataAndType(Uri.fromFile(f), type); startActivity(intent); } /* 判断文件MimeType的方法 */ private String getMIMEType(File f) { String type = ""; String fName = f.getName(); /* 取得扩展名 */ String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length()).toLowerCase(); /* 依附档名的类型决定MimeType */ if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) { type = "audio"; } else if (end.equals("3gp") || end.equals("mp4")) { type = "video"; } else if (end.equals("jpg") || end.equals("gif") || end.equals("png") || end.equals("jpeg") || end.equals("bmp")) { type = "image"; } else { /* 如果无法直接打开,就跳出软件列表给用户选择 */ type = "*"; } type += "/*"; return type; } }

 

第二步:适配器代码,与文件查看管理器类似:

 

package com.my; /* import相关class */ import irdc.ex05_15.R; import java.io.File; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; /* 自定义的Adapter,继承android.widget.BaseAdapter */ public class MyAdapter extends BaseAdapter { /* * 变量声明 mIcon1:回到根目录的图文件 mIcon2:回到上一层的图片 mIcon3:文件夹的图文件 mIcon4:文件的图片 */ private LayoutInflater mInflater; private Bitmap mIcon1; private Bitmap mIcon2; private Bitmap mIcon3; private Bitmap mIcon4; private List items; private List paths; /* MyAdapter的构造器,传入三个参数 */ public MyAdapter(Context context, List it, List pa) { /* 参数初始化 */ mInflater = LayoutInflater.from(context); items = it; paths = pa; mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.back01); mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.back02); mIcon3 = BitmapFactory.decodeResource(context.getResources(), R.drawable.folder); mIcon4 = BitmapFactory.decodeResource(context.getResources(), R.drawable.doc); } /* 因继承BaseAdapter,需重写以下方法 */ @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup par) { ViewHolder holder; if (convertView == null) { /* 使用自定义的file_row作为Layout */ convertView = mInflater.inflate(R.layout.file_row, null); /* 初始化holder的text与icon */ holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } File f = new File(paths.get(position).toString()); /* 设置[回到根目录]的文字与icon */ if (items.get(position).toString().equals("b1")) { holder.text.setText("Back to /"); holder.icon.setImageBitmap(mIcon1); } /* 设置[回到上一层]的文字与icon */ else if (items.get(position).toString().equals("b2")) { holder.text.setText("Back to .."); holder.icon.setImageBitmap(mIcon2); } /* 设置[文件或文件夹]的文字与icon */ else { holder.text.setText(f.getName()); if (f.isDirectory()) { holder.icon.setImageBitmap(mIcon3); } else { holder.icon.setImageBitmap(mIcon4); } } return convertView; } /* class ViewHolder */ private class ViewHolder { TextView text; ImageView icon; } }

 

第三步:主程序的布局

 

 

第四步:listview的布局

 

 

第五步:添加了一个自定义的对话框:

 

 

ok!

你可能感兴趣的:(android)