中国移动互联网研发培训专家/***Deleteinternalprivatefile*@paramfilename-thefilenametodelete*/publicvoiddeleteInternalStoragePrivate(Stringfilename){Filefile=getFileStreamPath(filename);if(file!=null){file.delete();}}现在可以来看为公共数据使用外部存储器了。中国移动互联网研发培训专家有了数据存储API,您可以使用外部存储器存储数据。信息可以是私有的,您可以有选择地让其他应用程序对之具有读或写的访问权限。本节您将对此API进行编程,以便使用包括getExternalStorageState()、getExternalFilesDir()、getExternalStorageDirectory()和getExternalStoragePublicDirectory()在内的很多API来存储公共数据。您为公共数据使用下面的路径:/Android/data/package_name/files/。在使用外部存储器之前,必须看看它是否可用,是否可写。下面两个代码片段展示了测试这些条件的帮助器方法。清单23测试外部存储器是否可用。中国移动互联网研发培训专家/***HelperMethodtoTestifexternalStorageisAvailable*/publicbooleanisExternalStorageAvailable(){booleanstate=false;StringextStorageState=Environment.getExternalStorageState();if(Environment.MEDIA_MOUNTED.equals(extStorageState)){state=true;}returnstate;}清单24测试外部存储器是否只可读。中国移动互联网研发培训专家/***HelperMethodtoTestifexternalStorageisreadonly*/publicbooleanisExternalStorageReadOnly(){booleanstate=false;StringextStorageState=Environment.getExternalStorageState();if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)){state=true;}returnstate;}清单25展示了如何写到外部存储器,以存储公共数据。中国移动互联网研发培训专家/***Writetoexternalpublicdirectory*@paramfilename-thefilenametowriteto*@paramcontent-thecontenttowrite*/publicvoidwriteToExternalStoragePublic(Stringfilename,byte[]content){//APILevel7orlower,usegetExternalStorageDirectory()//toopenaFilethatrepresentstherootoftheexternal//storage,butwritingtorootisnotrecommended,andinstead中国移动互联网研发培训专家//applicationshouldwritetoapplication-specificdirectory,asshownbelow.StringpackageName=this.getPackageName();Stringpath=/Android/data/+packageName+/files/;if(isExternalStorageAvailable()&&!isExternalStorageReadOnly()){try{Filefile=newFile(path,filename);中国移动互联网研发培训专家file.mkdirs();FileOutputStreamfos=newFileOutputStream(file);fos.write(content);fos.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}清单26展示了如何从外部存储器读取数据。中国移动互联网研发培训专家/***Readsafilefrominternalstorage*@paramfilename-thefilenametoreadfrom*@returnthefilecontents*/publicbyte[]readExternallStoragePublic(Stringfilename){intlen=1024;byte[]buffer=newbyte[len];StringpackageName=this.getPackageName();Stringpath=/Android/data/+packageName+/files/;中国移动互联网研发培训专家if(!isExternalStorageReadOnly()){try{Filefile=newFile(path,filename);FileInputStreamfis=newFileInputStream(file);ByteArrayOutputStreambaos=newByteArrayOutputStream();intnrb=fis.read(buffer,0,len);//readuptolenbyteswhile(nrb!=-1){baos.write(buffer,0,nrb);nrb=fis.read(buffer,0,len);}中国移动互联网研发培训专家buffer=baos.toByteArray();fis.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}returnbuffer;}清单27中的代码片段展示了如何从外部内存删除文件。中国移动互联网研发培训专家/***Deleteexternalpublicfile*@paramfilename-thefilenametowriteto*/voiddeleteExternalStoragePublicFile(Stringfilename){StringpackageName=this.getPackageName();Stringpath=/Android/data/+packageName+/files/+filename;Filefile=newFile(path,filename);if(file!=null){file.delete();}}处理外部存储器需要特殊的权限WRITE_EXTERNAL_STORAGE,它通过AndroidManifest.xml请求得到(参见清单28)。中国移动互联网研发培训专家uses-permissionandroid:name=android.permission.WRITE_EXTERNAL_STORAGE/外部存储API通过根据文件类型(比如Pictures、Ringtones)将文件存储在预先确定的目录中,允许您公共地存储文件。本文没有介绍这种方法,但是您应该熟悉它。此外,记住外部存储器中的文件任何时候都可能消失。中国移动互联网研发培训专家相关的方法如果您具有不需要长期永久保存的临时文件,那么可以将这些文件存储在高速缓存中。高速缓存是一种特殊的内存,可以用于存储中小型数据(少于兆字节),但是您一定要知道,取决于有多少内存可用,高速缓存的内容任何时候都可能被清除。清单29展示了一个帮助器方法,它返回到内部内存中高速缓存的路径。中国移动互联网研发培训专家/***Helpermethodtoretrievetheabsolutepathtotheapplication*specificinternalcachedirectoryonthefilesystem.Thesefiles*willbeonesthatgetdeletedwhentheapplicationisuninstalledorwhen*thedevicerunslowonstorage.Thereisnoguaranteewhenthese*fileswillbedeleted.**Note:ThisusesaLevel8+API.**@returntheabsolutepathtotheapplicationspecificcache中国移动互联网研发培训专家*directory*/publicStringgetInternalCacheDirectory(){StringcacheDirPath=null;FilecacheDir=getCacheDir();if(cacheDir!=null){cacheDirPath=cacheDir.getPath();}returncacheDirPath;}清单30展示了一个帮助器方法,它返回到外部内存中高速缓存的路径。中国移动互联网研发培训专家/***Helpermethodtoretrievet