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

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

与目录的处理后面会讲到



在我的程序里。我写了一个类。对文件进行处理。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. [译]移动API安全终极指南

    文章主要讲了移动api调用的授权和验证问题,原文链接:The Ultimate Guide to Mobile API Security 移动API的使用是Stack Overflow和 Stormp ...

  2. 如何优雅的设计 React 组件

    作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...

  3. Nginx实现负载均衡&Nginx缓存功能

    一.Nginx是什么 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl ...

  4. 收集—— css实现垂直居中

    Method1: 在父元素上设置display:table-cell;vertical-align:middle(父元素不能设置浮动) Method2: 使用flex:父元素设置成display: f ...

  5. 微信小程序入门(前言)

    最近接到一个开发微信小程序的任务,由于没有开发过小程序,所以只能查看官方文档.查找相关博文.资料来开发. 微信小程序一开始出现就受到热烈的追捧,因为其"无需安装.用完即走"的理念确 ...

  6. 【Spring】Spring MVC高级技术

    前言 前面学习了简单的Spring Web知识,接着学习更高阶的Web技术. 高级技术 Spring MVC配置的替换方案 自定义DispatcherServlet配置 在第五章我们曾编写过如下代码. ...

  7. Python之子进程subprocess模块

    http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html http://blog.csdn.net/jgood/article/deta ...

  8. 自定义统一api返回json格式(app后台框架搭建三)

    在统一json自定义格式的方式有多种:1,直接重写@reposeBody的实现,2,自定义一个注解,自己去解析对象成为json字符串进行返回 第一种方式,我就不推荐,想弄得的话,可以自己去研究一下源码 ...

  9. db2中left()函数和right()函数对应oracle中的substr()函数

     DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LEFT.RIGHT函数返回ARG最左边.右边的LENGTH个字符串,ARG可以是CHA ...

  10. swizzle method 和消息转发机制的实际使用

    我的工程结构,如图 1-0 图  1-0 在看具体实现以前,先捋以下 实现思路. ViewController 中有一个-(void)Amethod;A方法. -(void)Amethod{ NSLo ...