这里运用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">
<ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"
/>
<TextViewandroid: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"?>
<LinearLayoutxmlns: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. */@Overridepublic 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));}@Overrideprotected 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() {@Overridepublic 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 stubString 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() {@Overridepublic 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);}//获取文件mimetypeprivate 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);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn names.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn names.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><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之简单文件管理器相关推荐

  1. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

  2. Android 简单文件管理器

    Android 简单文件管理器 开发环境Android studio 4.1.2 运行环境 api 22 ps api 23及以上需动态添加sd卡权限,静态添加无效 <uses-permissi ...

  3. android 调用系统文件管理器

    今天,简单讲讲android如何调用系统的文件管理器获取目录下的文件资源. 这几天,还是因为搬家的事,导致自己状态很差.和领导说想要辞职,领导说还是先适应一下在说.所以还是坚持了. 这个其实也很简单, ...

  4. 安卓打开java文件管理器_Android开发之简单文件管理器实现方法

    本文实例讲述了Android开发之简单文件管理器实现方法.分享给大家供大家参考,具体如下: 这里运用Java I/O.ListActivity.Dialog.Bitmap等实现简单文件管理器,可以查看 ...

  5. 手机如何能看java文件管理器_基于安卓Android的手机文件管理器的设计(AndroidStudio)...

    基于安卓Android的手机文件管理器的设计(AndroidStudio)(论文13000字,程序代码) 摘要:本文的目标是设计开发出一款Android手机文件管理器,首先介绍了开发工具和开发语言的来 ...

  6. android简单文件管理器源码,文件管理器-android源代码

    代码介绍: 以下是对文件管理器android源代码程序功能介绍如下: 功能说明:图片预览 图标异步加载 双击拖曳改为搜索键拖曳 添加intent动作可以获取文件名 (在设置->APK备份目录 有 ...

  7. Android设置默认文件管理器,使用默认资源管理器在Android中查看文件夹内容

    我想以编程方式启动默认文件资源管理器以显示文件夹的内容. 我正在使用此代码,但它崩溃了: Uri startDir = Uri.fromFile(new File("/sdcard/DCIM ...

  8. 基于android的资源文件管理器

    软 件 学 院 毕业实训报告 课题名称: android资源管理器 专 业: 软件设计(游戏开发方向) 班 级: 学 号: 学生姓名: 指导教师: 年 月 日 摘 要 相信大家对Android的发展历 ...

  9. Android 打开系统文件管理器,并返回选中文件的路径

    职场小白迷上优美句子: 推迟,拖延真的是件可怕的事,过去了好久还是原来的样子. 公司现在的项目中有一个需求,需要把本地 json 格式的数据导入到项目中使用,其实简单的逻辑就是:使用安卓隐式跳转的方式 ...

最新文章

  1. Practical Vim 第一章 第二章
  2. linux正则表达式BRE
  3. Seata 1.4.0 重磅发布
  4. c语言中如何打出草花图案,C语言程序设计程设计题目1.doc
  5. python爬虫更改ip_Python小说爬虫,有目录,有文字极简处理,还有IP解锁方式
  6. cocos2d-x JS 重力感应监听事件
  7. 概率整形 Peobabilistic Shaping PS 第一节
  8. Spring之事件监听
  9. 图片怎么做雕刻路径_浮雕做图的简要步骤
  10. 两相四线混合式步进电机用双H桥驱动电路之Multisim仿真及优化
  11. 面试题:CSS3实现折角效果
  12. 解决Ubuntu键盘错乱问题
  13. 九度1088——剩下的树
  14. App Inventor 2制作天气预报
  15. Ubuntu布置Django项目
  16. matlab最基础教程(四):常用的系统自带函数,符号变量与字符串篇
  17. RAID磁盘阵列详解and软阵列(raid0,raid1,raid5,raid1+0 热备盘)配置实验
  18. 网络舆情源头管理方案
  19. 腾讯优测-优社区干货精选 | android开发在路上:少去踩坑,多走捷径(上)
  20. 360在线网站安全检测,web安全测试AppScan扫描工具,XSS常用的攻击手法

热门文章

  1. 银河计算机网络科技公司,银河开关,科技创新 银河无限
  2. 武汉关于二套房的定义
  3. 西木博士零饥饿减肥法
  4. matlab三维山峰/山脉/山地曲面数据图
  5. CISCO 相关技术大集合(收藏)_01
  6. 时间的艺术 —OPPO Reno5 Pro+艺术家限定版浅析
  7. 关于SqlServer高并发死锁现象的分析排查
  8. PostgreSQL 时间函数 extract函数和epoch 新纪元时间的使用
  9. ChatGPT这么火,对留学有什么影响?
  10. Postgresql源码(106)Generic Plan与Custom Plan的区别(以分区表为例)