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

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

与目录的处理后面会讲到



在我的程序里。我写了一个类。对文件进行处理。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. SQLServer2008R2 发布订阅及相关问题解决办法

    前言: 前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库 ...

  2. 利用C#转换图片格式及转换为ico

    注意:转换为ICO后效果不好. 源代码: using System;using System.Collections.Generic;using System.Text;using System.Dr ...

  3. C#线程调用带参数的方法

    在 .NET Framework 2.0 版中,要实现线程调用带参数的方法有两种办法.第一种:使用ParameterizedThreadStart.调用 System.Threading.Thread ...

  4. web前端vertical-align的作用及对象详解

    很多程序员知道web前端技术里的vertical-align是什么意思,但是对于vertical-align到底以什么为对齐标准却一知半解,今天我们就来说说web前端vertical-align. 1 ...

  5. Linux系列教程(二十一)——Linux的bash基本功能

    上篇博客我们介绍了什么是shell,以及编写shell脚本的两种执行方式.我们知道在敲命令的时候,有很多快捷键,比如tab键能补全命令,在比如为什么我们直接敲 ll 命令能显示目录的长格式,其实这是b ...

  6. Google Python编程规范

    http://pan.baidu.com/s/1dD1Ra7J 其他语言的编程风格: http://zh-google-styleguide.readthedocs.org/en/latest/

  7. 【爬虫】利用Scrapy抓取京东商品、豆瓣电影、技术问题

    1.scrapy基本了解 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取(更确切来说,网络抓 ...

  8. Java并发之线程管理(线程基础知识)

    因为书中涵盖的知识点比较全,所以就以书中的目录来学习和记录.当然,学习书中知识的时候自己的思考和实践是最重要的.说到线程,脑子里大概知道是个什么东西,但很多东西都还是懵懵懂懂,这是最可怕的.所以想着细 ...

  9. js判断手机或Pc端登陆.并跳转到相应的页面

    <script src="~/Web/js/jquery-1.10.1.min.js"></script> <script> $(functio ...

  10. 解决微信公众平台IP白名单

    微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分的电信的家庭级别的 ...