fileUtils.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'dart:io';
  2. import 'dart:math';
  3. import 'package:convert/convert.dart';
  4. import 'package:crypto/crypto.dart';
  5. import 'package:path/path.dart' as path;
  6. import 'logger.dart';
  7. String fileOrDirectoryName(FileSystemEntity directory) {
  8. return lastNameOfPath(directory.path);
  9. }
  10. String lastNameOfPath(path) {
  11. final paths = path.split(Platform.pathSeparator);
  12. return paths.last;
  13. }
  14. bool isDirectory(path) {
  15. return FileSystemEntity.isDirectorySync(path);
  16. }
  17. Future<bool> isDirectoryExists(path) {
  18. return Directory(path).exists();
  19. }
  20. Future<bool> isFileExists(path) {
  21. return File(path).exists();
  22. }
  23. bool isFile(path) {
  24. return FileSystemEntity.isFileSync(path);
  25. }
  26. Future<int> fileSizeOf(path) async {
  27. final file = File(path);
  28. final size = await file.length();
  29. return size;
  30. }
  31. String formatFileSize(int bytes) {
  32. if (bytes <= 0) return "0 B";
  33. const suffixes = ["B", "KB", "MB", "GB", "TB", "PB", "EB"];
  34. var i = (log(bytes) / log(1024)).floor();
  35. return ((bytes / pow(1024, i)).toStringAsFixed(2)) + ' ' + suffixes[i];
  36. }
  37. // MD5
  38. Future<String> getFileMd5(String filePath) async {
  39. final fileExists = File(filePath).existsSync();
  40. if (!fileExists) throw FileSystemException("File does not exist", filePath);
  41. final file = File(filePath);
  42. final digest = await file.openRead().transform(md5).first;
  43. return hex.encode(digest.bytes);
  44. }
  45. createFolder(String folderPath) async {
  46. // 创建文件夹
  47. final Directory folder = Directory(folderPath);
  48. // 如果文件夹不存在,则创建
  49. if (!await folder.exists()) {
  50. await folder.create();
  51. } else {
  52. Log.d("Folder already exists");
  53. }
  54. }
  55. copyDirectory(Directory source, Directory destination) async {
  56. await for (var entity in source.list(recursive: false)) {
  57. if (entity is Directory) {
  58. var newDirectory = Directory(
  59. path.join(destination.absolute.path, path.basename(entity.path)));
  60. await newDirectory.create();
  61. await copyDirectory(entity.absolute, newDirectory);
  62. } else if (entity is File) {
  63. await entity.copy(
  64. path.join(destination.path, path.basename(entity.path)));
  65. }
  66. }
  67. }
  68. clearDirectory(Directory directory) async {
  69. // 列出所有文件和文件夹
  70. var files = directory.listSync();
  71. // 遍历文件和文件夹
  72. for (var fileEntity in files) {
  73. if (fileEntity is File) {
  74. // 文件直接删除
  75. await fileEntity.delete();
  76. } else if (fileEntity is Directory) {
  77. // 文件夹则递归删除
  78. await clearDirectory(fileEntity);
  79. await fileEntity.delete();
  80. }
  81. }
  82. }
  83. deleteDirectory(String path) async {
  84. final directory = Directory(path);
  85. await directory.delete(recursive: true);
  86. }