Android 编程之入门开发文件夹管理器开发文件事件操作-2

上一篇博客,我们已经得到了文件夹列表,我们需要对文件列表子项添加事件,比如我们点击的是文件,就执行

打开操作,点击的是文件夹执行打开文件夹操作,遍历文件清单,以此类推直到最后一个是文件位置,关于文件

与文件夹的处理后面会讲到

在我的程序里,我写了一个类,对文件进行处理,FileOpreationUitl:

package com.example.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;
/**
 * 文件的操作类
 * @author Engineer-Jsp
 * @date 2014.10.27
 */
public class FileOpreationUitl {
	public static Map<String,Object> mp3_List=new HashMap<String,Object>();
	public static List<Map<String, Object>>mp3_data=new ArrayList<Map<String,Object>>();
	public static String mp3_listitem;
//
	public static Map<String,Object> picture_List=new HashMap<String,Object>();
	public static List<Map<String, Object>>picture_data=new ArrayList<Map<String,Object>>();
	public static String picture_listitem;
//
	public static Map<String,Object> video_List=new HashMap<String,Object>();
	public static List<Map<String, Object>> video_data=new ArrayList<Map<String,Object>>();
	public static String video_listitem;
	//删除文件和目录
	public void  deleteFile(File path){
		//如果传来的参数path是文件,直接执行删除操作
		if(path.isFile()){
			//删除
			path.delete();
		//否则为文件夹,执行下面的操作
		}else{
			//定义文件数组接收参数Path文件夹的文件列表
			File[] files=path.listFiles();
			//循环编历文件
			for(File  f : files){
				//如果是文件执行
				if(f.isFile()){
					//删除
					f.delete();
				}else{
					//调用自己递归
					deleteFile(f);
				}
			}
			//删除目录
			path.delete();
		}
	}
	//复制文件
	public void  copyFile(File currentpath,File srcpath){

		File newFile=new File(srcpath, currentpath.getName());
		if(!newFile.exists()){
			try {
				newFile.createNewFile();
				FileInputStream fileinput=new FileInputStream(currentpath);
				FileOutputStream fileout=new FileOutputStream(newFile);

				byte[] byt=new byte[1024 * 16];
				int length=0;
				while((length=fileinput.read(byt))!=-1){
					fileout.write(byt,0,length);
				}
				fileinput.close();
				fileout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
//		else{
//			newFile.delete();
//			copyFile(currentpath, srcpath);
//		}
	}
	//复制文件夹
	public void  copyDirectory(File currentpath,File srcpath){

		if(currentpath.isFile()){
			copyFile(currentpath, srcpath);
		}else{
			File file=new File(srcpath, currentpath.getName());
			if(!file.exists()){
				file.mkdir();
			}
//			else{
//				file.delete();
//			}
			File[] files=currentpath.listFiles();
			for(File f : files){
				copyDirectory(f, file);
			}
			//删除目录
//			currentpath.delete();
		}
	}
	//新建
	public void  newFile(File currentpath){
		if(!currentpath.exists()){
			currentpath.mkdirs();
		}

	}
	//音乐分类
		/**
		 *
		 * @param groupPath  如果你想获取SDcard下面的所以mp3文件你就填sdcard路径
		 * 用的是递归的方式获取
		 */
		public void getReciver(File mp3_Path){
			//循环获取sdcard目录下面的目录和文件
			for(int i=0; i< mp3_Path.listFiles().length; i++){
				File childFile = mp3_Path.listFiles()[i];

				//假如是目录的话就继续调用getSDcardFile()将childFile作为参数传递的方法里面
				if(childFile.isDirectory()){
					getReciver(childFile);
				}else{
					//如果是文件的话,判断是不是以.mp3结尾,是就加入到List里面
					if(childFile.toString().endsWith(".mp3")){
						mp3_List.put(mp3_listitem,childFile.getName().toString());
						mp3_data.add(mp3_List);
						//打印文件的文件名
						System.out.println(childFile.getName());
						Log.d("XXXXXXXXXX",childFile.getName());
						//打印文件的路径
						System.out.println(childFile.getAbsolutePath());
						Log.d("XXXXXXXXXX",childFile.getAbsolutePath());
					}
				}
			}
		}
	    //图片分类
		public void getPicture(File picture_Path){
			//循环获取sdcard目录下面的目录和文件
			for(int i=0; i<picture_Path.listFiles().length; i++){
				File childFile =picture_Path.listFiles()[i];

				//假如是目录的话就继续调用getSDcardFile()将childFile作为参数传递的方法里面
				if(childFile.isDirectory()){
					getPicture(childFile);
				}else{
					//如果是文件的话,判断是不是以.mp3结尾,是就加入到List里面
					if(childFile.toString().endsWith(".png")
							||childFile.toString().endsWith(".gif")
							||childFile.toString().endsWith(".bmp")
							||childFile.toString().endsWith(".jpg")){
						picture_List.put(picture_listitem,childFile.getName().toString());
						picture_data.add(picture_List);
						//打印文件的文件名
						System.out.println(childFile.getName());
						Log.d("XXXXXXXXXX",childFile.getName());
						//打印文件的路径
						System.out.println(childFile.getAbsolutePath());
						Log.d("XXXXXXXXXX",childFile.getAbsolutePath());
					}
				}
			}
		}
		//视频分类
		public void getVideo(File video_Path){
			//循环获取sdcard目录下面的目录和文件
			for(int i=0; i<video_Path.listFiles().length; i++){
				File childFile = video_Path.listFiles()[i];

				//假如是目录的话就继续调用getSDcardFile()将childFile作为参数传递的方法里面
				if(childFile.isDirectory()){
					getVideo(childFile);
				}else{
					//如果是文件的话,判断是不是以.mp3结尾,是就加入到List里面
					if(childFile.toString().endsWith(".mp4")
							||childFile.toString().endsWith(".avi")
							||childFile.toString().endsWith(".rmvb")
							||childFile.toString().endsWith(".3gp")){
						video_List.put(video_listitem,childFile.getName().toString());
						video_data.add(video_List);
						//打印文件的文件名
						System.out.println(childFile.getName());
						Log.d("XXXXXXXXXX",childFile.getName());
						//打印文件的路径
						System.out.println(childFile.getAbsolutePath());
						Log.d("XXXXXXXXXX",childFile.getAbsolutePath());
					}
				}
			}
		}
	//搜索
//	public void  searchFile(File path){
//
//	}
}

配合 MultiChoiceModeListener 执行多选,优于 setChoiceMode 单选,让application可以执行批量的操作处理,包括复制、删除等,下面看看效果:

执行新建测试,点击右上角小+号:

点击确定,生成文件夹,刷新列表:

下面看看批量复制操作,长按ListView Item,右上角小+号消失,生成删除按钮和复制按钮,点击Item选中,更改选中Item项背景颜色:

执行批量粘贴,这里我只点了5项,所以只粘贴了5个文件夹,大家注意看右上角图标,又恢复到了没有复制操作的时候的图标,其实在点击复制按钮之后,会添加一个粘贴按钮,粘贴完后消失:

批量删除操作:

文件操作大概就写了这些,有需要的可以自己拓展,我这里主要是方便大伙学习,谢谢~

时间: 2024-10-12 21:39:24

Android 编程之入门开发文件夹管理器开发文件事件操作-2的相关文章

Android 编程之入门开发文件夹管理器开发详细讲解-1

在我们的手持设备中,一般都会自带设备公司自己开发的文件管理系统.拍照系统之类的东东,今天我给大伙说说入门级开发的文件夹管理器,代码贼少 总共就6个类吧,没有夹杂其他外部应用,就是一个纯文件夹管理器 APP主要功能设计:文件复制.文件夹复制.批量文件/文件夹复制.删除文件.删除文件夹.批量删除文件/文件夹.文件分类.文件搜索暂时没有写, 有兴趣的可以自己写写 APP主要应用:DrawerLayout .ListView.Fragment.IO.序列化.文件过滤.文件排序.ActionBar.Ada

Android 编程之入门开发文件夹管理器开发抽屉与文件分类-4

在此文件夹管理APP里,我们可以尝试引用一些新的元素,在这里我给打击介绍一个叫抽屉的布局,QQ就用到了抽屉布局,不 过他们又在原有的基础上自己开发了新的抽屉布局,并且还蛮高大上的,顺便说说分类管理,这些都只是很初步的一些写法, 因为是前期写的,后期就没做完善了,适合一般入门级伙伴学习,首先给大家说说抽屉布局,还是以图形的方式介绍比较好 抽屉布局示例,点击红色方框按钮即可弹出抽屉布局,或者顺势向右划屏也可以弹出抽屉布局: 弹出布局: 文件管理文类: 图片分类: 音乐分类: 视频分类: 对后缀类型匹

Android 编程之入门开发文件夹管理器开发文件的过滤与排序-3

前面说了文件操作和主界面,接下来说说文件的过滤和排序,我们都知道在我们的设备里,不管是PC还是手机,总有一些我们 看不到的文件夹,那就是所谓的隐藏文件,大部分的隐藏文件,我们是没有权限操作的,所有对我们来说没必要,必须干掉, 还有就是给文件列表排序,方面查找,其实在现在的文件夹管理里,不知道大家有没有发现,就是在界面的最右或者最左边有 一个从A-Z竖向排列的选项,点击每个字母,它会跳到以那个字开头的文件列表项去,这是比较好用的一款东西,因为APP是之 前写的,也就没用到新式的东西了,咱们就说说粗

仿手机文件夹管理器

仿手机文件夹管理器,可以打开显示SD卡下是文件,可以进入下一级和返回上一级. 效果图: 关键代码入下: import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.ut

Android文件夹管理器源码实现

一.资源管理器介绍 现在在一些移动终端上面都会有自带的资源管理器,其实其并非是Android系统自带,而是手机产商与app开发商的合作而导致融合,借助第三方的开发软件预装在出厂的手机,是新时代下的另一个霸王条款,还不能自行删除,十分麻烦. 背景铺垫完毕,由于十分讨厌这种不公平的手段,为此自行写一个实现文件资源管理器,功能基本上实现,实用不美观,不喜勿喷! 二.实现函数详解 1.显示文件列表 /** * 扫描显示文件列表 * @param path */ private void showFile

Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作

当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑.与此同时还有一种更灵活的方法,从assets文件夹下读取对应的.sql文件,然后创建表. 1.首先在工程的assets文件夹下,添加对应的.sql文件 2.配置一个Configuration类,用于保存固定路径变量 [java] view plaincopy public class Configuration { public stat

文件夹管理器

1.文件管理器(NSFileManager) 1> 创建文件夹 创建所需的方法在头文件的声明: /* createDirectoryAtPath:withIntermediateDirectories:attributes:error: creates a directory at the specified path. If you pass 'NO' for createIntermediates, the directory must not exist at the time this

C#WinForm treeview 简单文件夹管理器 查看文件夹下的文件,子文件下的文件

1 查看的文件夹中的内容 2 UI 3 代码 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.IO; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks; 10 usi

linux:文件及文件夹管理

http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=1000(pika) groups=1000(pika),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),125(docker) 文件夹与路径 cd:变换目弽pwd:显示弼前目弽mkdir:建立一个新的文