嵌入式系统课程设计.doc_第1页
嵌入式系统课程设计.doc_第2页
嵌入式系统课程设计.doc_第3页
嵌入式系统课程设计.doc_第4页
嵌入式系统课程设计.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告(本科)课程:嵌入式系统及应用开发学号:1010431095 10104310051010431123姓名:张强 赵伟 吴晶班级:10级计算机软件嵌入式班教师:江东时间:2013.5.282013.6.20计算机科学与技术系设计名称:基于android文件管理器的设计与实现 设计内容、目的与要求:编写此软件需求说明书的目的是为后续开发程序提供功能、接口等各方面的参照,也为程序实际使用者提供参考。本文的预期读者为程序开发人员及普通用户。现在,有很多手机软件使手机的应用更为方便,本软件开发的目的就是开发一款实用的手机文件管理系器对一系列的手机软件及文件进行管理,方便快捷。本软件为android系统的手机用户提供服务,可以使用安装器进行安装。主要功能:(1) 能按对文件进行打开、修改、删除、重命名、粘贴、剪切。(2) 能按文件目录对文件进行管理(3) 能够查询文件的基本信息和修改文件计划与进度安排:5月28日6月13日: 完成设计思路并作出草稿;完成程序的输入;6月14日6月17日:完成对基本功能的修改并运行无误;增加对开始的源程序的功能;6月18日至6月20: 修改并完成,提交验收;设计过程、步骤(可加页):一、 功能结构根目录Says。SbinSystemAppBin。DevBus。 图1二、设计说明(1)根目录如图2.1所示 图2.1其xml代码main.xml 文件代码如下:public class FileManager extends ListActivityprivate ListdirectoryEntries = new ArrayList();private FilecurrentDirectory = new File(/);private File myTmpFile = null;private int myTmpOpt = -1;/* Called when the activity is first created. */Overridepublic void onCreate(Bundle icicle)super.onCreate(icicle);browseToRoot();this.setSelection(0);/浏览文件系统的根目录private void browseToRoot() browseTo(new File(/); /返回上一级目录private void upOneLevel()if(this.currentDirectory.getParent() != null)this.browseTo(this.currentDirectory.getParentFile();/浏览指定的目录,如果是文件则进行打开操作private void browseTo(final File file)this.setTitle(file.getAbsolutePath();if (file.isDirectory()this.currentDirectory = file;fill(file.listFiles();elsefileOptMenu(file); (2)文件夹选择界面如图2.2所示,由于文件夹较多,此以一个为例。 图 2.2其xml代码如下:package com.yarin.android.FileManager;import android.content.Context;import android.graphics.drawable.Drawable;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class IconifiedTextView extends LinearLayout/一个文件包括文件名和图表/采用一个垂直线性布局private TextViewmText= null;private ImageViewmIcon= null;public IconifiedTextView(Context context, IconifiedText aIconifiedText) super(context);/设置布局方式this.setOrientation(HORIZONTAL);mIcon = new ImageView(context);/设置ImageView为文件的图标mIcon.setImageDrawable(aIconifiedText.getIcon();/设置图标在该布局中的填充位置mIcon.setPadding(8, 12, 6, 12); /将ImageView即图表添加到该布局中addView(mIcon, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);/设置文件名、填充方式、字体大小mText = new TextView(context);mText.setText(aIconifiedText.getText();mText.setPadding(8, 6, 6, 10); mText.setTextSize(26);/将文件名添加到布局中addView(mText, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);/设置文件名public void setText(String words)mText.setText(words);/设置图标public void setIcon(Drawable bullet)mIcon.setImageDrawable(bullet);(3)主界面颜色设置代码如下:package com.yarin.android.FileManager;import android.content.Context;import android.graphics.drawable.Drawable;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class IconifiedTextView extends LinearLayout/一个文件包括文件名和图表/采用一个垂直线性布局private TextViewmText= null;private ImageViewmIcon= null;public IconifiedTextView(Context context, IconifiedText aIconifiedText) super(context);/设置布局方式this.setOrientation(HORIZONTAL);mIcon = new ImageView(context);/设置ImageView为文件的图标mIcon.setImageDrawable(aIconifiedText.getIcon();/设置图标在该布局中的填充位置mIcon.setPadding(8, 12, 6, 12); /将ImageView即图表添加到该布局中addView(mIcon, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);/设置文件名、填充方式、字体大小mText = new TextView(context);mText.setText(aIconifiedText.getText();mText.setPadding(8, 6, 6, 10); mText.setTextSize(26);/将文件名添加到布局中addView(mText, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);/设置文件名public void setText(String words)mText.setText(words);/设置图标public void setIcon(Drawable bullet)mIcon.setImageDrawable(bullet);(4)文件或文件夹重命名界面: 图2.3代码如下:public boolean deleteFile(File file)boolean result = false;if (file != null)tryFile file2 = file;file2.delete();result = true;catch (Exception e)e.printStackTrace();result = false;return result; (5)选择文件操作功能界面如下图: 图2.4 代码如下: private boolean checkEndsWithInStringArray(String checkItsEnd, String fileEndings)for(String aEnd : fileEndings)if(checkItsEnd.endsWith(aEnd)return true;return false;public boolean onCreateOptionsMenu(Menu menu)super.onCreateOptionsMenu(menu);menu.add(0, 0, 0, 新建目录).setIcon(R.drawable.addfolderr);menu.add(0, 1, 0, 删除目录).setIcon(R.drawable.delete);menu.add(0, 2, 0, 粘贴文件).setIcon(R.drawable.paste);menu.add(0, 3, 0, 根目录).setIcon(R.drawable.goroot);menu.add(0, 4, 0, 上一级).setIcon(R.drawable.uponelevel);return true;public boolean onOptionsItemSelected(MenuItem item)super.onOptionsItemSelected(item);switch (item.getItemId()case 0:Mynew();break;case 1:/注意:删除目录,谨慎操作,该例子提供了/deleteFile(删除文件)和deleteFolder(删除整个目录)MyDelete();break;case 2:MyPaste();break;case 3:this.browseToRoot();break;case 4:this.upOneLevel();break;return false;Overridepublic boolean onPrepareOptionsMenu(Menu menu)return super.onPrepareOptionsMenu(menu);public boolean deleteFolder(File folder)boolean result = false;tryString childs = folder.list();if (childs = null | childs.length = 0)if (folder.delete()result = true;elsefor (int i = 0; i childs.length; i+)String childName = childsi;String childPath = folder.getPath() + File.separator + childName;File filePath = new File(childPath);if (filePath.exists() & filePath.isFile()if (filePath.delete()result = true;elseresult = false;break;else if (filePath.exists() & filePath.isDirectory()if (deleteFolder(filePath)result = true;elseresult = false;break;folder.delete();catch (Exception e)e.printStackTrace();result = false;return result; (6)选择删除文件时,弹出注意对话框: 图2.5 图2.6代码如下:if ( deleteFolder(tmp) )Builder builder = new Builder(FileManager.this);builder.setTitle(提示);builder.setMessage(删除成功);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() public void onClick(DialogInterface dialog, int which) dialog.cancel(););builder.setCancelable(false);builder.create();builder.show();else Builder builder = new Builder(FileManager.this);builder.setTitle(提示);builder.setMessage(删除失败);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() public void onClick(DialogInterface dialog, int which) dialog.cancel(););builder.setCancelable(false);builder.create();builder.show();this.browseTo(this.currentDirectory); ).show(); (7操作界面如图示: 图2.7/显示操作菜单 String menu=打开,重命名,删除,复制,剪切; new AlertDialog.Builder(FileManager.this) .setTitle(请选择你要进行的操作) .setItems(menu,listener) .show();(8建立文件如图示: 图2.8public boolean newFolder(String file)File dirFile = new File(this.currentDirectory.getAbsolutePath()+/+file);tryif (!(dirFile.exists() & !(dirFile.isDirectory()boolean creadok = dirFile.mkdirs();if (creadok)this.browseTo(this.currentDirectory);return true;elsereturn false;catch (Exception e)e.printStackTrace();System.out.println(e);return false;return true;结果与分析(可以加页): 功能上有对文件管理的命名,删除,复制,剪切,修改等简单的功能;优点是:增加文件可以将各种信息录入其中;删除我增加了一项确认的功能,可以防止误删;也可以复制文件;修改包括文件名,文件信息等,可以让使用着快速的了解和应用此软件。缺点是:每次运行时都要点击打开文件,比较麻烦,为此,在程序中学生的人数可自己设定,但没有文件保存方便;另外一个就是部分功能重复,就会浪费内存空间;设计体会与建议: 通过本次课程设计,学到了很多东西。首先,这是我第一次接触android,虽然开发的软件比较简单,但是开发过程中也遇到了很多问题,通过查阅资料,跟同学一起探讨等方法解决了问题,从中学到了不光是关于android方面的知识,也再一次了解了java的玄妙,大大激发了学习新技术的兴趣。通过本次软件开发,了解了一些android的基本知识,了解到android由Activity、Intent、Content Provider和Service四部分组成。本次课程设计的不足之处是原本想要的一些功能还没有实现,比如文件管理器的播放音频文件功能,复制粘贴功能等,由于时间仓促,只能暂时完成到这里,在课后,我一定会把那些功能逐步完善,力求达到心中预期的目标。21附录:源程序代码package com.yarin.android.FileManager;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Collections;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnClickListener;import android.graphics.drawable.Drawable;import .Uri;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;public class FileManager extends ListActivityprivate ListdirectoryEntries = new ArrayList();private FilecurrentDirectory = new File(/);private File myTmpFile = null;private int myTmpOpt = -1;/* Called when the activity is first created. */Overridepublic void onCreate(Bundle icicle)super.onCreate(icicle);browseToRoot();this.setSelection(0);/浏览文件系统的根目录private void browseToRoot() browseTo(new File(/); /返回上一级目录private void upOneLevel()if(this.currentDirectory.getParent() != null)this.browseTo(this.currentDirectory.getParentFile();/浏览指定的目录,如果是文件则进行打开操作private void browseTo(final File file)this.setTitle(file.getAbsolutePath();if (file.isDirectory()this.currentDirectory = file;fill(file.listFiles();elsefileOptMenu(file);/打开指定文件protected void openFile(File aFile)Intent intent = new Intent();intent.setAction(android.content.Intent.ACTION_VIEW);File file = new File(aFile.getAbsolutePath();/ 取得文件名String fileName = file.getName();/ 根据不同的文件类型来打开文件if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage)intent.setDataAndType(Uri.fromFile(file), image/*);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio)intent.setDataAndType(Uri.fromFile(file), audio/*);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo)intent.setDataAndType(Uri.fromFile(file), video/*);startActivity(intent);/这里可以理解为设置ListActivity的源private void fill(File files)/清空列表this.directoryEntries.clear();/添加一个当前目录的选项this.directoryEntries.add(new IconifiedText(getString(R.string.current_dir), getResources().getDrawable(R.drawable.folder);/如果不是根目录则添加上一级目录项if (this.currentDirectory.getParent() != null)this.directoryEntries.add(new IconifiedText(getString(R.string.up_one_level), getResources().getDrawable(R.drawable.uponelevel);Drawable currentIcon = null;for (File currentFile : files)/判断是一个文件夹还是一个文件if (currentFile.isDirectory()currentIcon = getResources().getDrawable(R.drawable.folder);else/取得文件名String fileName = currentFile.getName();/根据文件名来判断文件类型,设置不同的图标if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage)currentIcon = getResources().getDrawable(R.drawable.image);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingWebText)currentIcon = getResources().getDrawable(R.drawable.webtext);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingPackage)currentIcon = getResources().getDrawable(R.drawable.packed);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio)currentIcon = getResources().getDrawable(R.drawable.audio);else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo)currentIcon = getResources().getDrawable(R.drawable.video);elsecurrentIcon = getResources().getDrawable(R.drawable.text);/确保只显示文件名、不显示路径如:/sdcard/111.txt就只是显示111.txtint currentPathStringLenght = this.currentDirectory.getAbsolutePath().length();this.directoryEntries.add(new IconifiedText(currentFile.getAbsolutePath().substring(currentPathStringLenght), currentIcon);Collections.sort(this.directoryEntries);IconifiedTextListAdapter itla = new IconifiedTextListAdapter(this);/将表设置到ListAdapter中itla.setListItems(this.directoryEntries);/为ListActivity添加一个ListAdapterthis.setListAdapter(itla);protected void onListItemClick(ListView l, View v, int position, long id)super.onListItemClick(l, v, position, id);/ 取得选中的一项的文件名String selectedFileString = this.directoryEntries.get(position).getText();if (selectedFileString.equals(getString(R.string.current_dir)/如果选中的是刷新this.browseTo(this.currentDirectory);else if (selectedFileString.equals(getString(R.string.up_one_level)/返回上一级目录this.upOneLevel();elseFile clickedFile = null;clickedFile = new File(this.currentDirectory.getAbsolutePath()+ this.directoryEntries.get(position).getText();if(clickedFile != null)this.browseTo(clickedFile);/通过文件名判断是什么类型的文件private boolean checkEndsWithInStringArray(String checkItsEnd, String fileEndings)for(String aEnd : fileEndings)if(checkItsEnd.endsWith(aEnd)return true;return false;public boolean onCreateOptionsMenu(Menu menu)super.onCreateOptionsMenu(menu);menu.add(0, 0, 0, 新建目录).setIcon(R.drawable.addfolderr);menu.add(0, 1, 0, 删除目录).setIcon(R.drawable.delete);menu.add(0, 2, 0, 粘贴文件).setIcon(R.drawable.paste);menu.add(0, 3, 0, 根目录).setIcon(R.drawable.goroot);menu.add(0, 4, 0, 上一级).setIcon(R.drawable.uponelevel);return true;public boolean onOptionsItemSelected(MenuItem item)super.onOptionsItemSelected(item);switch (item.getItemId()case 0:Mynew();break;case 1:/注意:删除目录,谨慎操作,该例子提供了/deleteFile(删除文件)和deleteFolder(删除整个目录)MyDelete();break;case 2:MyPaste();break;case 3:this.browseToRoot();break;case 4:this.upOneLevel();break;return false;Overridepublic boolean onPrepareOptionsMenu(Menu menu)return super.onPrepareOptionsMenu(menu);/粘贴操作public void MyPaste()if ( myTmpFile = null )Builder builder = new Builder(FileManager.this);builder.setTitle(提示);builder.setMessage(没有复制或剪切操作);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() public void onClick(DialogInterface dialog, int which) dialog.cancel(););builder.setCancelable(false);builder.create();builder.show();elseif ( myTmpOpt = 0 )/复制操作if(new File(GetCurDirectory()+/+myTmpFile.getName().exists()Builder builder = new Builder(FileManager.this);builder.setTitle(粘贴提示);builder.setMessage(该目录有相同的文件,是否需要覆盖?);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() public void onClick(DialogInterface dialog, int which) copyFile(myTmpFile,new File(GetCurDirectory()+/+myTmpFile.getName();browseTo(new File(GetCurDirectory(););builder.setNegativeButton(android.R.string.cancel,new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) dialog.cancel(););builder.setCancelable(false);builder.create();builder.show();elsecopyFile(myTmpFile,new File(GetCurDirectory()+/+myTmpFile.get

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论