本文实例讲述了Android开发之简单文件管理器实现方法。分享给大家供大家参考,具体如下:

这里运用Java I/O、ListActivity、Dialog、Bitmap等实现简单文件管理器,可以查看目录文件,修改文件名,删除文件,打开文件。比较简单,直接看代码:

先看布局文件:

layout/main.xml<?xml version="1.0" encoding="utf-8"?>

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@android:id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

文件列表布局:

layout/file.xml<?xml version="1.0" encoding="utf-8"?>

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/imageView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="14sp">

修改文件名对话框布局文件:

layout/rename_dialog.xml<?xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/editText"

android:layout_width="match_parent"

android:layout_height="wrap_content"

/>

主Activity:public class MainActivity extends ListActivity {

private static final String ROOT_PATH = "/";

//存储文件名称

private ArrayList names = null;

//存储文件路径

private ArrayList 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();

paths = new ArrayList();

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 names = null;

//存储文件路径

private ArrayList paths = null;

//参数初始化

public MyAdapter(Context context,ArrayList na,ArrayList 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"?>

package="com.test.filemanager"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

运行结果如下:

查看目录文件

文件重命名:

删除文件:

打开文件:

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

更多Android开发之简单文件管理器实现方法相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

安卓打开java文件管理器_Android开发之简单文件管理器实现方法相关推荐

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

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

  2. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. android开发是java语言吗_android开发是用java语言吗?

    android开发的主流语言是java语言,但也可以使用其他语言,例可以通过Android NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程. Andro ...

  6. Java微信公众号开发之使用拦截器获取粉丝openID

    目的 本次实现的目的是:在微信公众号项目中,可能在每次访问页面的时候需要带上openid或者授权,查数据库太耗性能.多次多个地方去调授权接口也不是最佳的方案,如果能利用拦截器拦截到每次请求访问后台,这 ...

  7. android 实现视频播放功能,android开发之简单视频播放器(VideoView)

    简单视频播放器的使用 一.简单使用videoView和MediaController实现播放控制 1.添加需要的权限 2.设置布局 android:id="@+id/main_video&q ...

  8. android怎么监听多点触摸_Android开发中多点触摸的实现方法

    Android多点触控需要LCD驱动和程序设计支持,其实我们只要采用电容屏触摸手机的技术即可,接下来,就让爱站技术频道小编来讲解Android开发中多点触摸的实现方法吧! 多点触摸技术在实际开发过程中 ...

  9. java安卓6.0闪退_Android开发activity跳转闪退

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 现在调试也是闪退 Java.lang.RuntimeException: Fail to connect to camera service at and ...

最新文章

  1. Linux服务器-使用mysql
  2. cr3格式怎么转换成jpg_怎么把JPG格式转换为PDF?
  3. SQL   PL/SQL   SQL*PLUS三者的区别
  4. 从客户端...中检测到有潜在危险的 Request.Form 值
  5. [译]Javascript中的闭包(closures)
  6. CF617E XOR and Favorite Number
  7. 编辑了基因,就能成为人生赢家?5本书给你答案
  8. 什么是Thymeleaf?
  9. Deploy a replica set
  10. spring boot设置http https端口
  11. JavaScript设计模式:四、发布订阅模式
  12. GO语言中中文占3个字节,英文占1个字节
  13. MT6573芯片资料集锦芯片MTK6573_环境搭建
  14. 设计模式(十四)中介者模式
  15. SIO_KEEPALIVE_VALS 用户异常掉线检测
  16. Oracle EBS R12 GL总帐模块 查询账户余额、发生额SQL
  17. 巴纳比·杰克和他发现的ATM取款和心脏起搏器漏洞
  18. 纽约大学坦顿学院计算机排名,纽约大学坦顿工程学院排名多少?
  19. 微粒体精致毕业论文答辩PPT模板
  20. 【原来那么简单/大数据】随随便便开发一个属于自己的搜索引擎

热门文章

  1. 数据分析的五大思维方式
  2. 群里又会python的吗_群聊太多?三步教你用 Python 自动监听转发群消息!
  3. 陨落之光 Light Fall for Mac 动作冒险游戏 中文破解版下载
  4. AJAX框架衣柜推拉门设计,自己diy动手四推拉门衣柜内部结构设计图纸
  5. 首选DNS服务器地址的分析与应用
  6. c语言指针详解 第38课
  7. sketchup模型【办公椅模型】
  8. 软件测试工程师【人事面】切勿大意失荆州!
  9. connecting dl.google.com dl-ssl.google.com超时
  10. 三星a9s参数_三星A9s参数配置怎么样