上一篇博客,我们已经得到了目录列表,我们须要对文件列表子项加入事件,比方我们点击的是文件。就运行

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

与目录的处理后面会讲到



在我的程序里。我写了一个类。对文件进行处理。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,右上角小+号消失。生成删除button和复制button,点击Item选中,更改选中Item项背景颜色:







运行批量粘贴,这里我仅仅点了5项。所以仅仅粘贴了5个目录。大家注意看右上角图标,又恢复到了没有复制操作的时候的图标,事实上在点击复制button之后,会加入一个粘贴button,粘贴完后消失:





批量删除操作:





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





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

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

    在此目录管理APP里,我们能够尝试引用一些新的元素.在这里我给打击介绍一个叫抽屉的布局,QQ就用到了抽屉布局.不 过他们又在原有的基础上自己开发了新的抽屉布局.而且还蛮高大上的,顺便说说分类管理.这些 ...

  2. 二、Android应用的界面编程(二)布局管理器

    一.线性布局所有布局都可以作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件.实际上,我们完全可以用一个布局管理器嵌套到其他布局管理器中---因为布局管理器也继承了View ...

  3. macOS 下安装SDKMAN 软件开发工具包管理器

    SDKMAN 软件开发工具包管理器的安装非常简单,只需要打开终端,执行: $ curl -s "https://get.sdkman.io" | bash 就OK了,输出类似如下: ...

  4. SDKMAN 软件开发工具包管理器

    SDKMAN 是用来在类Unix 系统中管理多个版本的开发环境的工具.提供命令行接口来安装.切换.删除.列出候选版本. SDKMAN!是在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具 ...

  5. BI Admin Tools和目录管理器的连接配置

    BI管理(Admin Tools): BI Server 的管理工具,用来创建维护模型,并且能够管理安全,会话,变量等等.是用的最多的一个管理工具:这个工具可以编辑 rpd 文件也可以在线通过 ODB ...

  6. Spring3.0配置多个事务管理器(即操作多个数据源)的方法

    大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义 ...

  7. VS20xx下项目开发目录管理方法

    在VS20XX之后项目管理使用解决方案(solution)管理一个大的开发工程中多个项目(Project). 以下目录配置与工程名称无关,适用于一般的工程组织过程. 对于一般的生成可执行程序的工程,使 ...

  8. Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)

    Context Manager介绍 Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来 ...

  9. Android开发之AudioManager(音频管理器)具体解释

    AudioManager简单介绍: AudioManager类提供了訪问音量和振铃器mode控制. 使用Context.getSystemService(Context.AUDIO_SERVICE)来 ...

随机推荐

  1. DbContext 中的 Explicit interface implementation

    疑惑 前段时间一直再用Entity Framework 6,写了一些公用的方法,在这个过程中发现了DbContext实现的接口IObjectContextAdapter,可以通过这个接口访问到更底层的 ...

  2. linux7.2系统中安装Nmon并使用

    前提 安装linux系统中遇到一个问题,设置ip以后则ping不通,简单总结几步: 1.设置ip 进入 /etc/sysconfig/network-scripts目录下,修改文件名为ifcfg-en ...

  3. js基础01

    常见的五大浏览器:chrome firfox ie opera safari 浏览器的解析器会把代码解析成用户所能看到的东西 www.2cto.com/kf/201202/118111.html浏览器 ...

  4. 洛谷 P3384 【模板】树链剖分

    树链剖分 将一棵树的每个节点到它所有子节点中子树和(所包含的点的个数)最大的那个子节点的这条边标记为"重边". 将其他的边标记为"轻边". 若果一个非根节点的子 ...

  5. 记录一下通过分析Tomcat内部jar包找出request.getReader()所用的字符编码在哪里设置和起效的完整分析流程

    前言: 之前写Java服务端处理POST请求时遇到了请求体转换成字符流所用编码来源的疑惑,在doPost方法里通过request.getReader()获取的BufferedReader对象内部的 R ...

  6. 【Java】单词倒序输出

    如何将一段单词倒序输出?把"Hello Java Hello China"变成"China Hello Java Hello"? 看起来好像很简单,只需要把字符 ...

  7. eclipse自定义代码模板

    eclipse自定义代码模板 Eclipse 提供了非常多的代码模板,我们可以通过 Windows->Preferences->Java->Editor->Templates ...

  8. Java 执行CMD/DOS

    最近在写一个自己的邮箱服务器里用到 监视及起/停 windows 中的服务,调查发现还是得用dos来做这些事情 说一下遭遇战的过程 首先是java里如何执行DOS命令,查到下记函数 Runtime.g ...

  9. "逃离北京"的这些年 2

    一  找工作第二阶段 我为了保险,在辞职信还特别写了:特此提前一个月提出辞职. 果然是搞金融的,C公司在我提交辞职信后,一周内就让我整理好工作资料,办好辞职手续. 没关系,都是要走的人.早点离开也是好 ...

  10. c语言的内存分析

    1. 进制 1. 什么是进制 ● 是一种计数的方式,数值的表示形式  汉字:十一   十进制:11  二进制:1011  八进制:13 ● 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个 ...