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
*/
publicstaticListgetSDCardFileList(booleanshowHidden)
{
Listlist=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平台系统下测试过,基本上没问题,如果你碰到什么问题,可以在评论里给我留言,欢迎斧正!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。