• 删除
      • 删除文件(如果文件存在则删除,否则啥都不做)
      • 删除所有子文件(如果文件存在则删除,否则啥都不做)
    • 创建
      • 重新创建文件(删除后创建)
    • 读取文本
      • 获取文本的编码格式(UTF-8、GBK等)
      • 读取文本(自动判断编码格式)
    • 获取文件大小
      • 如果文件为文件夹,则遍历所有子文件(包括文件夹)获取大小总和
    1. /**
    2. * 如果文件存在则删除,如果不存在则什么都不做
    3. */
    4. fun File.deleteOnExist(){
    5. if (exists())delete()
    6. }
    7. /**
    8. *清空文件夹下的子文件
    9. */
    10. fun File.cleanChilds(){
    11. logi("执行清空文件夹")
    12. if (exists()&&isDirectory){
    13. for (file in listFiles()){
    14. try {
    15. file.delete()
    16. }catch (e:Exception){
    17. e.printStackTrace()
    18. }
    19. }
    20. }
    21. }
    22. /**
    23. * 重新创建文件
    24. */
    25. fun File.reCreate(){
    26. if (!parentFile.exists()){
    27. parentFile.mkdirs()
    28. }
    29. deleteOnExist()
    30. createNewFile()
    31. }
    32. /**
    33. * 获取文本文件的编码格式
    34. */
    35. fun File.getTextCode(): Charset {
    36. val head = ByteArray(3)
    37. inputStream().read(head,0,head.size)
    38. val code = when{
    39. head[0].toInt() == -1 && head[1].toInt() == -2 -> "UTF-16"
    40. head[0].toInt() == -2 && head[1].toInt() == -1 -> "Unicode"
    41. head[0].toInt() == -17 && head[1].toInt() ==-69
    42. && head[2].toInt() == -65 -> "UTF-8"
    43. head[0].toInt() == 123 && head[1].toInt() ==10
    44. && head[2].toInt() == 32 -> "UTF-8"
    45. else -> "gb2312"
    46. }
    47. return Charset.forName(code)
    48. }
    49. /**
    50. * 解析文本编码格式,返回正常编码的文本
    51. */
    52. fun File.readRightEnCodedText():String{
    53. return readText(getTextCode())
    54. }
    55. /**
    56. * 获取文件大小,如果为文件,则返回file.length
    57. * 否则为所有子文件的大小总和
    58. */
    59. fun File.sizeOfB():Long{
    60. var size = 0L
    61. if (!exists()){
    62. return size
    63. }
    64. if (isDirectory){
    65. listFiles().forEach {
    66. size += if (it.isDirectory){
    67. it.sizeOfB()
    68. }else{
    69. it.length()
    70. }
    71. }
    72. }else{
    73. size = length()
    74. }
    75. return size
    76. }
    77. /**
    78. * 获取文件大小,单位为 KB
    79. */
    80. fun File.sizeOfK():Float{
    81. return sizeOfB()/1024.0f
    82. }
    83. /**
    84. * 获取文件大小,单位为MB
    85. */
    86. fun File.sizeOfM():Float{
    87. return sizeOfK()/1024.0f
    88. }