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"> <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程序设计有所帮助。

时间: 2024-10-18 16:01:44

Android开发之简单文件管理器实现方法的相关文章

Android开发之简单文件管理器实现方法_Android

本文实例讲述了Android开发之简单文件管理器实现方法.分享给大家供大家参考,具体如下: 这里运用Java I/O.ListActivity.Dialog.Bitmap等实现简单文件管理器,可以查看目录文件,修改文件名,删除文件,打开文件.比较简单,直接看代码: 先看布局文件: layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&q

Android开发之电话拨号器和短信发送器实现方法_Android

本文实例讲述了Android开发之电话拨号器和短信发送器实现方法.分享给大家供大家参考,具体如下: 电话拨号器 实现原理:用户输入电话号码,当点击拨打的时候,由监听对象捕获,监听对象通过文本控件获取到用户输入的电话号码,由于系统已经实现了电话拨号功能,所以我们只需要调用这个功能就可以了. 步骤: 1.界面布局 2.编写Activity 3.使用意图过滤器激活电话拨号功能 4.添加电话服务权限(用手机的电话服务,要在清单文件AndroidManifest.xml中添加电话服务权限) 如图所示这三个

Android开发实现简单的观察者与被观察者示例

本文实例讲述了Android开发实现简单的观察者与被观察者.分享给大家供大家参考,具体如下: 概述: 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己. 观察者模式结构图 Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个

Android开发之图片旋转功能实现方法【基于Matrix】

本文实例讲述了Android开发之图片旋转功能实现方法.分享给大家供大家参考,具体如下: 在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配.Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作.Matrix没有机构体,它必须初始化,然后通过reset方法和set方法来实现. 首先介绍一下矩阵运算.加法和减法就不用说了,太简单了,对应位相加就好.图像处理,主要用到的是乘法 .下面是一个乘法的公式

Android开发中播放声音的两种方法分析

本文实例讲述了Android开发中播放声音的两种方法.分享给大家供大家参考,具体如下: 在Android中,音频.视频等多媒体元素的加入,使得应用程序的用户体验更好.可以说,现在的手机,已经远远不只作为通信工具,更成为娱乐.办公的必备产品. Android提供了简单的音频API.一般大家使用的是MediaPlayer播放音频,这也是最常见的一种播放声音的工具.这种工具在互联网上有大量的实例,因此在此只做简单的介绍. 对播放行为的控制是三个大家非常熟悉的方法:start().stop()和paus

Android开发之电话拨号器实例详解_Android

本文实例分析了Android开发之电话拨号器的用法.分享给大家供大家参考,具体如下: 1.新建一个名为javacallPhone的安卓项目,并在cn.csdn.hr.activity包下建一个CallPhoneActivity.java类 2.打开res下的Layout下的main.xml进行布局,设置布局方式为水平布局,再从左侧分别拖入textview,text files下的Phone,和button按钮,通过new String后效果如下: 3.打开CallPhoneActivity.ja

Android开发之获取LayoutInflater对象的方法总结_Android

本文实例讲述了Android开发之获取LayoutInflater对象的方法.分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View.本文主要目的是总结获取LayoutInflater对象的方法. 1.若能获取context对象,可以有以下几种方法: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYO

listview-安卓开发类似小米文件管理器路径界面

问题描述 安卓开发类似小米文件管理器路径界面 小米文件管理器在listview上有个路径框,每点击一次文件夹这个文件夹的名字就保存到路径框里,有多个路径框会隐藏前面的显示最新点击的文件夹名,点击每个文件夹名字会跳转到相应目录.这是怎么实现的,求教. 解决方案 http://www.javaapk.com/source/8341.html 解决方案二: 暂时没小米手机,发个效果图看看

Android开发进阶自定义控件之滑动开关实现方法【附demo源码下载】_Android

本文实例讲述了Android开发进阶自定义控件之滑动开关实现方法.分享给大家供大家参考,具体如下: 自定义开关控件 Android自定义控件一般有三种方式 1.继承Android固有的控件,在Android原生控件的基础上,进行添加功能和逻辑. 2.继承ViewGroup,这类自定义控件是可以往自己的布局里面添加其他的子控件的. 3.继承View,这类自定义控件没有跟原生的控件有太多的相似的地方,也不需要在自己的肚子里添加其他的子控件. ToggleView自定义开关控件表征上没有跟Androi