- 删除
- 删除文件(如果文件存在则删除,否则啥都不做)
- 删除所有子文件(如果文件存在则删除,否则啥都不做)
- 创建
- 读取文本
- 获取文本的编码格式(UTF-8、GBK等)
- 读取文本(自动判断编码格式)
- 获取文件大小
- 如果文件为文件夹,则遍历所有子文件(包括文件夹)获取大小总和
/**
* 如果文件存在则删除,如果不存在则什么都不做
*/
fun File.deleteOnExist(){
if (exists())delete()
}
/**
*清空文件夹下的子文件
*/
fun File.cleanChilds(){
logi("执行清空文件夹")
if (exists()&&isDirectory){
for (file in listFiles()){
try {
file.delete()
}catch (e:Exception){
e.printStackTrace()
}
}
}
}
/**
* 重新创建文件
*/
fun File.reCreate(){
if (!parentFile.exists()){
parentFile.mkdirs()
}
deleteOnExist()
createNewFile()
}
/**
* 获取文本文件的编码格式
*/
fun File.getTextCode(): Charset {
val head = ByteArray(3)
inputStream().read(head,0,head.size)
val code = when{
head[0].toInt() == -1 && head[1].toInt() == -2 -> "UTF-16"
head[0].toInt() == -2 && head[1].toInt() == -1 -> "Unicode"
head[0].toInt() == -17 && head[1].toInt() ==-69
&& head[2].toInt() == -65 -> "UTF-8"
head[0].toInt() == 123 && head[1].toInt() ==10
&& head[2].toInt() == 32 -> "UTF-8"
else -> "gb2312"
}
return Charset.forName(code)
}
/**
* 解析文本编码格式,返回正常编码的文本
*/
fun File.readRightEnCodedText():String{
return readText(getTextCode())
}
/**
* 获取文件大小,如果为文件,则返回file.length
* 否则为所有子文件的大小总和
*/
fun File.sizeOfB():Long{
var size = 0L
if (!exists()){
return size
}
if (isDirectory){
listFiles().forEach {
size += if (it.isDirectory){
it.sizeOfB()
}else{
it.length()
}
}
}else{
size = length()
}
return size
}
/**
* 获取文件大小,单位为 KB
*/
fun File.sizeOfK():Float{
return sizeOfB()/1024.0f
}
/**
* 获取文件大小,单位为MB
*/
fun File.sizeOfM():Float{
return sizeOfK()/1024.0f
}