Android文件操作工具类详解
本文实例为大家分享了Android文件操作工具类的具体代码,供大家参考,具体内容如下
贴上我写的一个文件操作工具类,基本上覆盖了各种文件操作:
1、文件的新建、删除;
2、文件的复制;
3、获取文件扩展名;
4、文件的重命名;
5、获取某个文件的详细信息;
6、计算某个文件的大小;
7、文件大小的格式化;
8、获取某个路径下的文件列表;
9、获取某个目录下的文件列表;
10、目录的新建、删除;
11、目录的复制;
12、计算某个目录包含的文件数量;
13、计算某个目录包含的文件大小;
代码如下:
1、FileUtil.java
packagecom.ctgu.filemaster.utils; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.IOException; importjava.text.DecimalFormat; importjava.text.SimpleDateFormat; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Date; importjava.util.List; importjava.util.Locale; importandroid.os.Environment; importandroid.util.Log; publicclassFileUtil { privatestaticfinalString[][]MIME_MapTable= { //{后缀名,MIME类型} {".3gp","video/3gpp"},{".apk","application/vnd.android.package-archive"}, {".asf","video/x-ms-asf"},{".avi","video/x-msvideo"}, {".bin","application/octet-stream"},{".bmp","image/bmp"},{".c","text/plain"}, {".class","application/octet-stream"},{".conf","text/plain"},{".cpp","text/plain"}, {".doc","application/msword"}, {".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".xls","application/vnd.ms-excel"}, {".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".exe","application/octet-stream"},{".gif","image/gif"}, {".gtar","application/x-gtar"},{".gz","application/x-gzip"},{".h","text/plain"}, {".htm","text/html"},{".html","text/html"},{".jar","application/java-archive"}, {".java","text/plain"},{".jpeg","image/jpeg"},{".jpg","image/jpeg"}, {".js","application/x-javascript"},{".log","text/plain"},{".m3u","audio/x-mpegurl"}, {".m4a","audio/mp4a-latm"},{".m4b","audio/mp4a-latm"},{".m4p","audio/mp4a-latm"}, {".m4u","video/vnd.mpegurl"},{".m4v","video/x-m4v"},{".mov","video/quicktime"}, {".mp2","audio/x-mpeg"},{".mp3","audio/x-mpeg"},{".mp4","video/mp4"}, {".mpc","application/vnd.mpohun.certificate"},{".mpe","video/mpeg"}, {".mpeg","video/mpeg"},{".mpg","video/mpeg"},{".mpg4","video/mp4"}, {".mpga","audio/mpeg"},{".msg","application/vnd.ms-outlook"},{".ogg","audio/ogg"}, {".pdf","application/pdf"},{".png","image/png"}, {".pps","application/vnd.ms-powerpoint"},{".ppt","application/vnd.ms-powerpoint"}, {".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".prop","text/plain"},{".rc","text/plain"},{".rmvb","audio/x-pn-realaudio"}, {".rtf","application/rtf"},{".sh","text/plain"},{".tar","application/x-tar"}, {".tgz","application/x-compressed"},{".txt","text/plain"},{".wav","audio/x-wav"}, {".wma","audio/x-ms-wma"},{".wmv","audio/x-ms-wmv"}, {".wps","application/vnd.ms-works"},{".xml","text/plain"}, {".z","application/x-compress"},{".zip","application/x-zip-compressed"},{"","*/*"} }; /** *根据文件后缀名获得对应的MIME类型 * *@paramfile *文件对象 */ publicstaticStringgetMIMEType(Filefile) { Stringtype="*/*"; StringfileName=file.getName(); intdotIndex=fileName.lastIndexOf(".");//获取后缀名前的分隔符"."在fileName中的位置 if(dotIndex<0) { returntype; } Stringend=fileName.substring(dotIndex,fileName.length()).toLowerCase(Locale.getDefault());//获取文件的后缀名 if(end.length()==0) { returntype; } //在MIME和文件类型的匹配表中找到对应的MIME类型 for(inti=0;i*则path为/java/test,fileName为1.txt *@paramfileName *文件名 *@return文件新建成功则返回true */ publicstaticbooleancreateFile(Stringpath,StringfileName) { Filefile=newFile(path+File.separator+fileName); if(file.exists()) { Log.w(Util.TAG,"新建文件失败:file.exist()="+file.exists()); returnfalse; } else { try { booleanisCreated=file.createNewFile(); returnisCreated; } catch(IOExceptione) { e.printStackTrace(); } } returnfalse; } /** *删除单个文件 * *@paramfile *要删除的文件对象 *@return文件删除成功则返回true */ publicstaticbooleandeleteFile(Filefile) { if(file.exists()) { booleanisDeleted=file.delete(); Log.w(Util.TAG,file.getName()+"删除结果:"+isDeleted); returnisDeleted; } else { Log.w(Util.TAG,"文件删除失败:文件不存在!"); returnfalse; } } /** *删除单个文件 * *@parampath *文件所在路径名 *@paramfileName *文件名 *@return删除成功则返回true */ publicstaticbooleandeleteFile(Stringpath,StringfileName) { Filefile=newFile(path+File.separator+fileName); if(file.exists()) { booleanisDeleted=file.delete(); returnisDeleted; } else { returnfalse; } } /** *复制文件 * *@paramsrcPath *源文件绝对路径 *@paramdestDir *目标文件所在目录 *@returnboolean */ publicstaticbooleancopyFile(StringsrcPath,StringdestDir) { booleanflag=false; FilesrcFile=newFile(srcPath);//源文件 if(!srcFile.exists()) { //源文件不存在 Util.toast("源文件不存在"); returnfalse; } //获取待复制文件的文件名 StringfileName=srcPath.substring(srcPath.lastIndexOf(File.separator)); StringdestPath=destDir+fileName; if(destPath.equals(srcPath)) { //源文件路径和目标文件路径重复 Util.toast("源文件路径和目标文件路径重复!"); returnfalse; } FiledestFile=newFile(destPath);//目标文件 if(destFile.exists()&&destFile.isFile()) { //该路径下已经有一个同名文件 Util.toast("目标目录下已有同名文件!"); returnfalse; } FiledestFileDir=newFile(destDir); destFileDir.mkdirs(); try { FileInputStreamfis=newFileInputStream(srcPath); FileOutputStreamfos=newFileOutputStream(destFile); byte[]buf=newbyte[1024]; intc; while((c=fis.read(buf))!=-1) { fos.write(buf,0,c); } fis.close(); fos.close(); flag=true; } catch(IOExceptione) { e.printStackTrace(); } if(flag) { Util.toast("复制文件成功!"); } returnflag; } /** *根据文件名获得文件的扩展名 * *@paramfileName *文件名 *@return文件扩展名(不带点) */ publicstaticStringgetFileSuffix(StringfileName) { intindex=fileName.lastIndexOf("."); Stringsuffix=fileName.substring(index+1,fileName.length()); returnsuffix; } /** *重命名文件 * *@paramoldPath *旧文件的绝对路径 *@paramnewPath *新文件的绝对路径 *@return文件重命名成功则返回true */ publicstaticbooleanrenameTo(StringoldPath,StringnewPath) { if(oldPath.equals(newPath)) { Log.w(Util.TAG,"文件重命名失败:新旧文件名绝对路径相同!"); returnfalse; } FileoldFile=newFile(oldPath); FilenewFile=newFile(newPath); booleanisSuccess=oldFile.renameTo(newFile); Log.w(Util.TAG,"文件重命名是否成功:"+isSuccess); returnisSuccess; } /** *重命名文件 * *@paramoldFile *旧文件对象 *@paramnewFile *新文件对象 *@return文件重命名成功则返回true */ publicstaticbooleanrenameTo(FileoldFile,FilenewFile) { if(oldFile.equals(newFile)) { Log.w(Util.TAG,"文件重命名失败:旧文件对象和新文件对象相同!"); returnfalse; } booleanisSuccess=oldFile.renameTo(newFile); Log.w(Util.TAG,"文件重命名是否成功:"+isSuccess); returnisSuccess; } /** *重命名文件 * *@paramoldFile *旧文件对象,File类型 *@paramnewName *新文件的文件名,String类型 *@return重命名成功则返回true */ publicstaticbooleanrenameTo(FileoldFile,StringnewName) { FilenewFile=newFile(oldFile.getParentFile()+File.separator+newName); booleanflag=oldFile.renameTo(newFile); System.out.println(flag); returnflag; } /** *计算某个文件的大小 * *@paramfile *文件对象 *@return文件大小,如果file不是文件,则返回-1 */ publicstaticlonggetFileSize(Filefile) { if(file.isFile()) { returnfile.length(); } else { return-1; } } /** *计算某个文件的大小 * *@parampath *文件的绝对路径 *@return */ publicstaticlonggetFileSize(Stringpath) { Filefile=newFile(path); longsize=file.length(); returnsize; } /** *文件大小的格式化 * *@paramsize *文件大小,单位为byte *@return文件大小格式化后的文本 */ publicstaticStringformatSize(longsize) { DecimalFormatdf=newDecimalFormat("####.00"); if(size<1024)//小于1KB { returnsize+"Byte"; } elseif(size<1024*1024)//小于1MB { floatkSize=size/1024f; returndf.format(kSize)+"KB"; } elseif(size<1024*1024*1024)//小于1GB { floatmSize=size/1024f/1024f; returndf.format(mSize)+"MB"; } elseif(size<1024L*1024L*1024L*1024L)//小于1TB { floatgSize=size/1024f/1024f/1024f; returndf.format(gSize)+"GB"; } else { return"size:error"; } } /** *格式化文件最后修改时间字符串 * *@paramtime *@return */ publicstaticStringformatTime(longtime) { Datedate=newDate(time); SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd,HH:mm:ss",Locale.getDefault()); StringformatedTime=sdf.format(date); returnformatedTime; } /** *获取某个路径下的文件列表 * *@parampath *文件路径 *@return文件列表File[]files */ publicstaticFile[]getFileList(Stringpath) { Filefile=newFile(path); if(file.isDirectory()) { File[]files=file.listFiles(); if(files!=null) { returnfiles; } else { returnnull; } } else { returnnull; } } /** *获取某个目录下的文件列表 * *@paramdirectory *目录 *@return文件列表File[]files */ publicstaticFile[]getFileList(Filedirectory) { File[]files=directory.listFiles(); if(files!=null) { returnfiles; } else { returnnull; } } /** *获得根目录文件列表 * *@paramshowHidden *@paramobject *@paramshowHidden *是否显示隐藏文件 *@return */ publicstaticList getSDCardFileList(booleanshowHidden) { List list=newArrayList<>(); Filefiles[]; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { FileextDir=Environment.getExternalStorageDirectory(); files=extDir.listFiles(); for(Filefile:files) { list.add(file); } if(showHidden) { // } else { for(inti=0;i =0)//目录下存在文件列表 { for(inti=0;i =0) { longsize=0; for(Filef:files) { if(f.isFile()) { //获得子文件的大小 size=size+getFileSize(f); } else { //获得子目录的大小 size=size+getFolderSize(f); } } returnsize; } return-1; } /** *获得某个文件或目录的大小 * *@paramfile *@return */ publicstaticlonggetFileOrFolderSize(Filefile) { longsize=0; if(file.isDirectory()) { size=getFolderSize(file); } else { size=getFileSize(file); } returnsize; } }
以上各方法均在Windows平台系统下测试过,基本上没问题,如果你碰到什么问题,可以在评论里给我留言,欢迎斧正!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。