文件管理器设计与实现方法.docx
《文件管理器设计与实现方法.docx》由会员分享,可在线阅读,更多相关《文件管理器设计与实现方法.docx(16页珍藏版)》请在冰豆网上搜索。
![文件管理器设计与实现方法.docx](https://file1.bdocx.com/fileroot1/2022-12/15/0f87cd02-6bae-46c0-98e9-5ef9eda31112/0f87cd02-6bae-46c0-98e9-5ef9eda311121.gif)
文件管理器设计与实现方法
本科生毕业论文
题目:
文件管理器的设计与实现方法
专业代码:
070102
作者姓名:
张家昌
学号:
2011201303
单位:
聊城大学
指导教师:
郑红霞
2010年5月18日
原创性声明
本人郑重声明:
所提交的学位论文是本人在导师指导下,独立进行研究取得的成果.除文中已经注明引用的内容外,论文中不含其他人已经发表或撰写过的研究成果,也不包含为获得聊城大学或其他教育机构的学位证书而使用过的材料.对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明.本人承担本声明的相应责任.
学位论文作者签名:
日期
指导教师签名:
日期
摘要
关键词:
android操作系统;java高级语言;eclipse开发平台;安卓文件管理器
现在随着信息技术的高速发展,智能手机的市场越来越红火。
随着智能手机制造成本的下降,越来越多的用户都能够拥有一部自己的智能手机。
尤其是基于安卓系统的智能手机,由于制造成本小,性价比好,让很多移动用户体会到了实惠,但是,由于Android系统本身没有提供文件管理的功能,如果要查看存储在手机SDCard上的文件就没有办法,以及写邮件时上传附件,以及上传文件等文件同步应用,这时候我们就需要文件浏览功能,但是Android本身并没有给我们提供这个功能,为此就要我们自己实现。
为此我设计了如下一款基于安卓的文件管理器,本项目主要实现了文件的分类管理,文件排序,文件的增加,删除,复制,粘贴,剪切,修改及多选等功能。
Abstract
nowwiththerapiddevelopmentofinformationtechnology,intelligentmobilephonemarketismoreandmoreprosperous.Assmartphonesasadeclineinthecostofmanufacturing,moreandmoreuserstobeabletoownasmartphone.BasedonAndroidsmartphones,inparticular,duetothesmallmanufacturingcost,costperformanceisgood,letmanymobileusersunderstandthebenefits,however,becausetheAndroidsystemitselfdoesnotprovidethefunctionoffilemanagement,ifyouwanttoviewthestoredinthefile,thereisnowaytoonthephone'sSDCard,andwriteemailtouploadattachments,anduploadfilesandfilesynchronizationUSES,thistimeweneedtofilebrowsing,butAndroiditselfdoesnotprovideuswiththisfeature,thiswillbeourown.thisprojectmainlyrealizestheclassificationoffilemanagement,filesorting,theincreaseofthefile,delete,copy,paste,shear,modificationandalternative,etc.
Keywords:
androidoperationsystem;Javaadvancedlanguage;eclipsedevelopmentplatform;Androidfilemanager
前言
现在,智能手机用户基本上普及了男女老少,大到七八十岁的爷爷奶奶,小到刚刚三四岁的小孩子,公交车上,公园里,地铁上,火车上到处可见手拿智能手机看电视,看电子书,玩游戏的男男女女。
总之,现在智能手机现在普及很广,不论年龄大小,都会用,都在用。
与电脑相比较而言,电脑的笨重,,易于携带,给用户带来很多不便,导致有些工作来不及处理,以至于影响员工的工作,进而影响整个公司的效率,降低整个企业的竞争力。
尤其是基于安卓系统的智能手机,以其便宜,超高的性价比赢得了很多用户的青睐。
智能手机兴起之前,我们常常看电视,上网,都要用到电脑或者电视。
它们很是笨重,携带非常不方便。
而这种种,我们都离不开文件管理器,不管是安卓系统本身自带的系统文件,还是用户自己的视频文件,照片,电子书等等,都需要一个工具来有序管理。
另外,人们对于智能手机文件管理功能的个性化的要求也在随着数据的爆炸逐步增加,以便于更好更快地适应社会的飞速发展,满足自己工作的需要。
就业压力、同行的竞争也要求智能手机的管理功能越来越适应时代的快节奏,对用户起到更重要的帮助。
但是安卓系统本身没有带有文件管理系统。
因此,我们需要给它设计一款适合的用来管理各种文件的工具,也就是我要做的文件管理专家,即文件管理器。
它为广大安卓用户提供了方便的可视化的文件管理UI界面。
操作简单,方便,易懂,适宜各个年龄段的的人群使用,给他们带来学习、工作上的便利。
1.Android开发环境
1.1安卓系统(Android)简介
Java是一种简单,易理解,相对较容易掌握的的高级编程语言,它是sun公司在1995年推出的。
面向对象是它最主要的特点,所谓面向对象是相对于面向过程而言的,即Java语言编写的程序的执行动作都要依赖于具体的某一个对象,完成某一项功能,首先考虑的不是要怎么做,而是考虑我们需要通过哪一个具体的对象来完成这项功能。
Java的第二个显著特点,便是它的跨平台可移植性,即首先把源程序编译成对应的以.class结尾的字节码文件,然后通过Java虚拟机来执行字节码文件。
第三个显著特点是Java舍弃了c++语言的指针特性,采用了更灵活好用的引用功能,Java语言的接口特性实现了多重继承,弥补了Java类只能单继承的缺陷。
垃圾回收也是Java语言的显著特性,所谓的垃圾回收指的是,Java程序运行完后,那些不再被引用的对象所占用的堆内存空间被直接回收,从而及时释放堆内存空间,以供其它程序运行用。
1.2开发Android应用程序采用Java语言的优势
Android是一种开源的操作系统,主要适用于移动设备,如智能手机和平板电脑,由谷歌公司领导及开发。
随着智能手机普及安卓系统得到了迅速的发展,2012年11月数据显示,安卓占据全球智能手机操作系统市场76%的份额。
中国市场占有率为90%。
目前,全世界采用这款系统的设备数量已经达到了10亿台。
安卓的普及也给相关的软件开发带来了机会。
像地图,新闻,音乐等都推出了安卓的应用软件;开发人员根据不同的需求设计开发了不同的手机应用,大受用户的追捧。
当然还有很多奇思妙想的应用等待着开发人员的开发。
技术上,Java的语言规范,一整套由web向下的框架,分类齐全的API,JVM的灵活性和可重构性都是其他语言无法比拟的。
开发上,Java程序员数量很多,入门相对容易,市场占有率较高,使用范围较为广泛,发展潜力也是很大。
Java程序可以在多种不一样的环境中使用,仅仅需要一次编译,就可以随时运行。
利益上,Java有相对稳定的联盟关系(apache,IBM,SUN,oracle),现在虽然联盟内有些不够朋友的,比如oracle,但是他们是相互依存,产品互补性还是很大的。
当然还有良好的开源社区环境。
2.系统需求分析及设计
最近几年来,信息技术发展越来越快,智能手机发展非常迅速。
市场上的非智能手机基本上销声匿迹。
基于安卓系统的智能手机与基于iOS系统的苹果智能机相比,安卓以其便宜的价格,可视化用户界面,好用的操作,及开源的操作系统,得到了更多更广的用户的支持和使用。
智能手机与普通手机相比,增添了很多新功能,可以看高清视频,2g,3g,4g,WiFi上网。
看电子书,可以自己安装各种软件。
实现了很多以前非智能及实现不了的功能。
基本了手机替代了电脑的功能。
但是,即便是有了这么多的功能,但是,安卓智能手机并不是十全十美,因为它没有系统自带的文件管理系统。
无法管理繁多的文件。
因此,对于安卓系统来说,急需一款用来管理系统自身的工具软件。
用来管理手机上的越来也多的文件。
实现有序,分类管理。
要实现文件的添加,修改,和删除等功能,还有与此相关的布局知识。
3.概要设计
3.1开发设计原理
文件管理器分别实现了两种浏览文件的方式,一种是网格布局GridView,如图4-1所示,另一种实现的是列表布局ListView,如图4-2所示。
这两种浏览模式显示图片的方式都是基于ViewPage,ViewPage主要是达到不同页面的跳转,实现滑动的效果;在ViewPage中嵌套ImageView类,显示各类文件的图标。
在Android中,我们可以通过事件处理使UI与用户互动。
具体形式则是以事件监听器的方式來“监听”用户的动作。
Android提供了非常良好的UI事件处理机制。
View是绘制UI的类,每个View对象都可以向Android注册一个事件监听器。
每个事件监听器都包含一个回调方法,这个回调方法主要的工作就是回应或处理用户的操作,。
进行界面跳转的时候就需要用到Activity和Intent类来进行跳转。
由于界面跳转的代码相似,只是目标Activity不同而已。
管理器将手机上的各类文件资源保存入R文件中,具体实现对相应文件的操作是通过手机上已安装的第三方应用程序来处理的。
比如,手机本地的视频文件会通过已有的暴风等软件来打开。
3.2主要实现的功能
点击手机桌面上的快捷方式进入到主界面后,屏幕上方会显示出主界面、音乐、视频、图片四个按钮。
点击相应的按钮会自动进入相应的文件界面,另外,由于两种浏览模式显示图片的方式都是基于ViewPage,ViewPage主要是达到不同页面的跳转,实现左右滑动的效果,所以滑动跳转到不同的文件界面。
在主界面中,实现了网格布局GridView和列表布局ListView,在上面所提到的四个按钮之下的图标实现了返回上一级、多选、返回手机桌面、粘贴、新建文件夹、切换浏览模式的功能。
在此页面上长按文件或者文件夹的图标会弹出一个对话框供用户进行相应的具体操作,而在音乐、视频、图片界面中显示的是只是显示了单一的各种文件,因此只是实现了的列表布局,这样的效果是界面比较清晰,方便查找,长按文件图标便会出现处理方式的提示。
4.系统功能模块设计与实现
4.1系统主界面模块
该界面的网格布局GridView,如图4-1所示,列表布局ListView,如图4-2所示。
这两种浏览模式显示图片的方式都是基于ViewPage类来实现的,ViewPage主要是达到不同页面的跳转,实现滑动的效果;在ViewPage中嵌套ImageView类,显示各类文件的图标。
主界面模块由多个Activity组成,进行界面跳转的时候就需要用到Activity和Intent来进行跳转。
由于界面跳转的代码相似,只是目标Activity不同而已,这里以设置界面为例,说明跳转的一般步骤。
首先需要设置监听动作,在实现的接口中复写onClick()函数,当用户进入主界面后进行操作点击桌面上的图标,虚拟机会按照程序根据用户的操作相对应的处理,也就是用户点击音乐、视频、图片的按钮时,虚拟机会根据不同的监听事件有switch语句完成选择跳转到用户选择的界面。
下面就是实现该功能的程序:
switch(index){
case0:
returnmFileBrowser;
case1:
returnmMusicFileBrowser;
case2:
returnmVideoFileBrowser;
case3:
returnmImageFileBrowser;
default:
returnnull;
}
该界面展示了本软件所具备的功能,每个模块均可以正常使用。
该应用程序启动时,即activity开始时会声明一些变量存储数据,虚拟机会把手机本地的不同的资源文件放入相应的list集合中共不同函数调用,实现具体的操作,如:
privateListmyViews;//定义私有的List集合对象,集合的范型为View
activity的生命周期开始需要通过init()函数初始化要调用的布局文件,生成音乐(mMusicFileBrowser)、视频(mViewFileBrowser)、图片(mImageViewBrowser)的对象,获取焦点完成后,主界面的activity的生命周期结束,要跳转的下一个activity的生命周期开始。
文件浏览的模式本文是通过与activity类似设置监听事件,因为有两种浏览方式,需要设置多个监听,这样增加代码了的重复。
这一是个程序人员应该避免的地方,当然也可以通过switch的参数来判断的,这样会更简便。
无论是用哪种方式实现,两个页面之间的跳转还是多个页面之间的跳转,它们之间的信息交互是很重要的环节。
实现网格浏览方式如下图所示:
图4-1主界面文件网格显示
实现列表浏览方式如下图所示:
图4-2主界面文件列表显示
4.2显示音乐模块
在音乐模块中,程序运行时,虚拟机将本地的所有的音乐文件名字放入准备好的mListView集合中,并保存在R文件中,以供FileItemForOperation类使用,FileItemForOperation生成的对象fileItem调用R文件中的整型音乐数据以列表的形式显示在手机界面中,如图4-3。
主要核心代码如下:
publicMusicFileBrowser(Contextcontext){//实现浏览音乐文件功能
super(context);//调用父类的构造方法
initView();//调用方法初始化View子控件
mViewMode=ViewMode.LISTVIEW;//初始化浏览模式
}
publicvoidonResume(){//获取焦点
if(!
onResume){//判断是聚焦
QueryData(newFile("/mnt/"),true,FileFilter.MUSIC);//刷新数据
onResume=true;//设置参数
}
}
privatevoidinitView(){//初始化控件的方法
图4-3显示音乐文件模块
mView=mInflater.inflate(R.layout.music_browser,null);//初始化View控件
mListView=(ListView)mView.findViewById(R.id.lvMusicList);//初始化本
控件
mListView.setOnItemClickListener(this);//设置监听器
}
@Override
publicvoidQueryData(FilepreFile,booleanclear,FileFilterfilter){//查询数据
super.QueryData(preFile,clear,filter);//继承超类的方法
mListView.setAdapter(mItemsAdapter);//设置ListView适配器
}
@Override
publicvoidonItemClick(AdapterView
>parent,Viewview,intposition,longid){//点击条目监听
FileItemForOperationfileItem=mData.getFileItems().get(position);
clickFileItem(fileItem);
}
4.3显示视频模块
在视频模块中,虚拟机将会将本地的视频文件,以.avi,.mp4,.mkv,.flv等结尾的文件放入mListView集合中,并保存在R文件中,对象mViewMode首先依据switch语句判断LISTVIEW与GRIDVIEW,然后以不同的后缀名子的文件类似音乐文件显示在视频界面中,如图4-4。
图4-4显示视频文件
该模块实现功能的核心代码如下:
publicvoidonResume(){//获取焦点
if(!
onResume){//判断
QueryData(newFile("/mnt/"),true,FileFilter.VIDEO);//查询刷新数据
onResume=true;//设置参数
}
}
privatevoidinitView(){//初始化view子控件
mView=mInflater.inflate(R.layout.video_browser,null);//初始化View对象
mListView=(ListView)mView.findViewById(R.id.lvVideoList);//生成列表布局对象
mListView.setOnItemClickListener(this);//设置监听器
mGridView=(GridView)mView.findViewById(R.id.gvVideoList);//生成网格布局对象
mGridView.setOnItemClickListener(this);//设置监听器
mGridView.setNumColumns(MainActivity.mScreenWidth/160);//设置网格显示大小
mGridView.setVisibility(View.GONE);//隐藏控件GridView不显示
}
4.4显示图片模块
在显示图片模块中,类似视频模块虚拟机会将本地的图片资源放入mListView集合中,对象mViewMode首先依据switch语句判断LISTVIEW与GRIDVIEW,使用已经存在R文件中的图片资源,一般手机中的图片资源往往会比较多,以列表的形式是不太方便查找,因此以网格布局显示在手机上,如图4-5。
图4-5显示图片模块
4.5实现新建文件夹功能模块
该模块展示了新建文件夹功能,点击首页当中的新建文件夹按钮进入新建文件夹模块,手机屏幕中会显示一个对话框,如图4-6所示。
启动创建文件夹命令时虚拟机会调用newFolder函数,并且在newFolder函数中嵌套使用自定义的comparator函数自动的把键入的文件夹的名字与该目录下的文件夹名字进行比较,如果键入的名字已存在,便会显示提醒对话框提醒用户重新键入文件夹的名字。
该功能通过if(folder.exists())的判断语句执行的。
如下:
if(folder.exists()){
responseHandler.sendMessage(responseMsg(NEWFOLDER_FAILED,FAILED_REASON_FOLDER_HAS_EXIST));
return;
}
创建文件夹完成后,新的文件夹的名字便会保存到本地数据中,供用户以后查询或者进行其他造作。
本管理器通过comparatorByName函数实现了按照文件夹的名字的顺序自动的排列文件夹,排列顺序可以自己去定义。
图4-6新建文件夹界面
4.6实现多选功能模块
本管理器有一个新的功能,那就是实现了将一个文件同时复制到多个文件夹中,当选中一个文件或者文件夹,即执行完doCopy()函数后,点击菜单栏的多选按钮,会以Toast的方式显示进入多选状态的对话框,这里用到了安卓里面的Toast类,如图4-7,然后选中多个文件夹,所选中的文件夹的名字会以不同的字体形式显示,此时执行粘贴命令多个文件或文件夹的复制便完成。
图4-7实现多选界面
4.7实现下拉列表模块
当用户想要对手机中的一些文件或者文件夹进行操作时,用户只需在手机屏幕中长按想要操作的文件或者文件夹,变会弹出一个下拉列表,如图4-8所示。
该下拉菜单是通过在Menu类的对象调用自定义的allSelect()、doOpen()、doCopy()、doPaste()、doMove()、doDelete()、doRename()函数操作手机本地文件,分别实现了全选(SelectAll),打开(Open),复制(Copy),剪切(Cut),删除(Delete)等功能。
当用户完成想要完成的操作后,虚拟机会自动的刷新数据。
具体实现的语句如下:
menu.add(0,MENU_SELECT_ALL,Menu.NONE,R.string.menu_select_all);//全选
menu.add(0,MENU_OPEN_AS,Menu.NONE,R.string.menu_open);//打开
menu.add(0,MENU_COPY,Menu.NONE,R.string.menu_copy_selected);//复制
menu.add(0,MENU_CUT,Menu.NONE,R.string.menu_cut_selected);//剪切
menu.add(0,MENU_DELETE,Menu.NONE,R.string.menu_delete_selected);//删除
图4-8下拉列表界面
4.7.1实现粘贴功能:
在该模块中实现了粘贴功能,此时用到了java中与文件相关的Filer类,以及相关的各种方法,也涉及到了多线程的知识。
虽然粘贴命令只有一个,但是虚拟机在处理的过程中需要进行一下判断,如果是文件直接用FileInputStream类与FileOutPutStream类将需要执行的文件导入用户指定的文件目录中。
如果是文件夹,则需要用递归的方式不停的判断文件类型才能完成相关操作。
相关的核心的代码如下:
privatevoiddoPaste(CopyOperationtype){//粘贴
if(DEBUG)Log.i(TAG,"pastecurrPosition===========>"+currPosition);
currOperationType=type;//当前操作类型
FileItemForOperationfileForOperation=mSrcToDir.get(currPosition);//创建文件条目对象
if(fileForOperation!
=null){//判断是否为空
FileItemfileItem=fileForOperation.getFileItem();
FilefromFile=newFile(fileItem.getFilePath());//创建文件对象
//如果复制的是文件夹
if(fromFile.isDirectory()){//判断是否是文件夹
if(!
addFi