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,右上角小+号消失。生成删除button和复制button,点击Item选中,更改选中Item项背景颜色:
运行批量粘贴,这里我仅仅点了5项。所以仅仅粘贴了5个目录。大家注意看右上角图标,又恢复到了没有复制操作的时候的图标,事实上在点击复制button之后,会加入一个粘贴button,粘贴完后消失:
批量删除操作:
文件操作大概就写了这些,有须要的能够自己拓展,我这里主要是方便大伙学习,谢谢~
Android 编程之入门开发目录管理器开发文件事件操作-2的更多相关文章
- Android 编程之入门开发目录管理器开发抽屉与文件分类-4
在此目录管理APP里,我们能够尝试引用一些新的元素.在这里我给打击介绍一个叫抽屉的布局,QQ就用到了抽屉布局.不 过他们又在原有的基础上自己开发了新的抽屉布局.而且还蛮高大上的,顺便说说分类管理.这些 ...
- 二、Android应用的界面编程(二)布局管理器
一.线性布局所有布局都可以作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件.实际上,我们完全可以用一个布局管理器嵌套到其他布局管理器中---因为布局管理器也继承了View ...
- macOS 下安装SDKMAN 软件开发工具包管理器
SDKMAN 软件开发工具包管理器的安装非常简单,只需要打开终端,执行: $ curl -s "https://get.sdkman.io" | bash 就OK了,输出类似如下: ...
- SDKMAN 软件开发工具包管理器
SDKMAN 是用来在类Unix 系统中管理多个版本的开发环境的工具.提供命令行接口来安装.切换.删除.列出候选版本. SDKMAN!是在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具 ...
- BI Admin Tools和目录管理器的连接配置
BI管理(Admin Tools): BI Server 的管理工具,用来创建维护模型,并且能够管理安全,会话,变量等等.是用的最多的一个管理工具:这个工具可以编辑 rpd 文件也可以在线通过 ODB ...
- Spring3.0配置多个事务管理器(即操作多个数据源)的方法
大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义 ...
- VS20xx下项目开发目录管理方法
在VS20XX之后项目管理使用解决方案(solution)管理一个大的开发工程中多个项目(Project). 以下目录配置与工程名称无关,适用于一般的工程组织过程. 对于一般的生成可执行程序的工程,使 ...
- Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)
Context Manager介绍 Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来 ...
- Android开发之AudioManager(音频管理器)具体解释
AudioManager简单介绍: AudioManager类提供了訪问音量和振铃器mode控制. 使用Context.getSystemService(Context.AUDIO_SERVICE)来 ...
随机推荐
- android视频播放器系列(一)——系统播放器
使用系统播放器(intent隐士调用)可以播放本地视频和网络视频,但是使用方式上稍微有点差别: 一.播放本地视频 Uri uri = Uri.parse("本地视频地址");Int ...
- JAVA提高十二:HashMap深入分析
首先想说的是关于HashMap源码的分析园子里面应该有很多,并且都是分析得很不错的文章,但是我还是想写出自己的学习总结,以便加深自己的理解,因此就有了此文,另外因为小孩过来了,因此更新速度可能放缓了, ...
- Android AsyncTask内部线程池异步执行任务机制简要分析
如下分析针对的API 25的AsyncTask的源码: 使用AsyncTask如果是调用execute方法则是同步执行任务,想要异步执行任务可以直接调用executeOnExecutor方法,多数情况 ...
- CopyOnWriteArrayList并发容器
CopyOnWriteArrayList并发容器 Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才 ...
- Hibernate开发文档
hibernate配置 映射约束文件 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3. ...
- java_IO流读取本地文件
package com.ht.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoun ...
- Velocity(2)——常用语法
Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象.作为一个比较完善 ...
- 集合>哈希表类Hashtable和SortedList排序列表类
集合>哈希表类Hashtable Hashtable一种键值对的集合 ,哈希表内部的排列是无序的,而且哈希表没有提供排序方法. 集合>哈希表类Hashtable>构造普通哈希表 代码 ...
- K-Means和图片压缩
通俗的介绍这种压缩方式,就是将原来很多的颜色用少量的颜色去表示,这样就可以减小图片大小了.下面首先我先介绍下K-Means,当你了解了K-Means那么你也很容易的可以去理解图片压缩了,最后附上图片压 ...
- Ext3和Ext4文件系统区别
inode http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html Ex3使用15个inode查询数据块,前12个为直接数据块,直接指 ...