本文实例讲述了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\"> <EditText android: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() { @Override public 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() { @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(MainActivity.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(MainActivity.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{ new AlertDialog.Builder(MainActivity.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(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 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); } }
因为要对文件进行操作,所以在描述文件中授权:
<?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程序设计有所帮助。
本文地址:https://www.stayed.cn/item/542
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我